SSH завершается ошибкой ключа хоста при отправке команды, но работает без него

SSH завершается ошибкой ключа хоста при отправке команды, но работает без него

Я настраиваю сервер для поддержки SSH с аутентификацией по ключу хоста, которая в настоящее время обрабатывается старым умирающим сервером. На данный момент я могу успешно подключиться по SSH и взаимодействовать в терминале как обычно. Однако, если я включаю команду или помещаю SSH в команду RSync, я получаю ошибку "Host key verification failed".

Итак, эта команда работает:

ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]

В то время как следующее не делает:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

Однако они оба работают, когда указывают на старый сервер, так что сами команды должны быть в порядке. Кроме того, если мне удастся не менять команды, это позволит нам быть обратно совместимыми.

Ниже я привожу настройки sshd_config на новом сервере (которые были настроены так, чтобы имитировать старый сервер) на случай, если они помогут. Единственные элементы здесь — те, которые не были закомментированы.

HostbasedAuthentication нет
RhostsRSAAuthentication нет
PermitEmptyPasswords нет
ChallengeResponseAuthentication нет
UsePAM да
X11Forwarding да
PrintMotd нет
PrintLastLog да
TCPKeepAlive да
AcceptEnv LANG LC_*
Подсистема sftp /usr/lib/openssh/sftp-server
PubkeyAuthentication да
RSAAuthentication да
LoginGraceTime 2m
PermitRootLogin да
StrictModes да

Новый сервер — Ubuntu 17.10 (будет обновлен до LTS, когда выйдет следующая версия). Старый сервер — Debian 6.0.6.

Редактировать: Забыл упомянуть, эта ошибка также возникает, когда я использую RSync с '-e'. Однако я обнаружил, что в команде RSync я могу исправить проблему, используя [email protected]:/mnt/storage/new_folderпараметр удаленного пути. Если я уберу "username@", то снова получу ошибку. Опять же, неисправная версия отлично работает на старом сервере, не работает только с новым сервером. Также имейте в виду, что это устаревший код, поэтому если я смогу заставить старые команды работать как есть, это сэкономит мне кучу времени на отправку обновлений.

решение1

Хорошо, вы находитесь на хосте A (не указан), и когда вы запускаете команду 1:

ssh -o StrictHostKeyChecking=no -i /cygdrive/C/keys/id_rsa [email protected]

и вы получаете интерактивную оболочку на хосте B (192.168.0.2). Но когда вы запускаете команду 2:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

(от хоста А) вы получаете ошибку.

Хорошо, запустите команду 1 с хоста A и получите интерактивную оболочку на хосте B. Теперь на хосте B запустите команду 2b:

ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder

Что происходит? Если и это не срабатывает, то ваша проблема не в том, что «SSH не работает из-за ошибки ключа хоста при отправке команды, но работает без нее», ваша проблема в том, что хост B не может подключиться к себе по ssh — или, точнее, что «пользователь» на хосте B не настроен на возможность подключения по ssh к хосту B.

И, для полноты картины, что произойдет, если выполнить команду 2c:

ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected]  mkdir -p /mnt/storage/new_folder

(от хоста А)?

Связанный контент