Я настраиваю сервер для поддержки 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
(от хоста А)?