В настоящее время я работаю над унаследованным мною проектом, который требует от меня документирования процесса настройки устройства, которое мы используем для преобразования образа наших машин и установки на них программного обеспечения.
Я использую Raspberry Pi в качестве хоста для установки ОС и программного обеспечения, и у меня возникли проблемы с одной последней частью сценария установки, которая требует, чтобы я мог выполнить команду через SSH и получить возвращаемое значение. Команда, которую я пытаюсь выполнить, выглядит следующим образом:
ssh -o StrictHostKeyChecking=no host uname -a &>/dev/null
rc=$?
Это дословная команда. Для хоста не указан пользователь и пароль, поэтому я полагаю, он аутентифицируется с помощью ключей. Я мало что знаю о SSH, но, поскольку предполагается, что на каждом Pi должно быть идентичное изображение, я предполагаю, что ключи SSH будут одинаковыми, поэтому я скопировал содержимое / etc / ssh из старого в новый. Я не стал копировать содержимое ~ / .ssh, потому что единственный файл в этом каталоге на ОБЕИХ устройствах - known_hosts.
Однако, несмотря на ту же настройку и те же ключи SSH, старый может без проблем выполнить эту команду, а новый запрашивает пароль root @ host.
Что еще могло повлиять на мою способность выполнить эту команду? Мне не хватает какой-то непонятной конфигурации SSH? Я просмотрел практически все, что смог найти в Google, и единственный ответ, который я смог найти, - это сгенерировать ключ на машине, которая должна выполнить команду, и установить его в файл authorized_keys хоста, но поскольку Pi даже не есть этот файл, а у старого Pi уже есть ключи в / etc / ssh, которые, как я полагаю, используются для этой цели, я не понимаю, почему новый Pi с той же настройкой и теми же ключами не может пройти аутентификацию.
Для работы аутентификации по ключу в файле authorized_keys должен быть открытый ключ, а права доступа к файлу не должны позволять никому, кроме владельца, писать в файл. Расположение по умолчанию для этого файла: .ssh/authorized_keys .ssh/authorized_keys2
, но его можно изменить с помощью AuthorizedKeysFile
вариант в /etc/ssh/sshd_config
. Другое место для файла конфигурации также можно указать в командной строке, также можно переопределить параметры в командной строке.
Если это не поможет вам решить проблему, вам следует посмотреть журнал sshd, чтобы выяснить, что не так. Возможно, вам придется увеличить уровень журнала (опция sshd LogLevel
) в VERBOSE или DEBUG.
Хорошо, поэтому, покопавшись еще немного, я обнаружил, что есть отдельный каталог .ssh в / root, содержащий файл authorized_keys. После копирования на новый Pi это сработало. Все это время я задавался вопросом, есть ли отдельная папка конфигурации для root, но я никогда не копался в / root, поэтому я не знал, что она там есть.