私は、現在古い死にかけのサーバーで処理されているホスト キー認証による SSH をサポートできるようにサーバーを設定しています。現時点では、SSH で正常に接続し、通常どおりターミナルで対話できます。ただし、コマンドを追加したり、SSH を RSync コマンドに入力したりすると、「ホスト キーの検証に失敗しました」というエラーが発生します。
したがって、このコマンドは機能します:
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
PermitRootLog はい
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
(ホスト A から) エラーが発生します。
ホスト A からコマンド 1 を実行し、ホスト B で対話型シェルを取得します。次に、ホスト B でコマンド 2b を実行します。
ssh 192.168.0.2 mkdir -p /mnt/storage/new_folder
どうなるでしょうか? これも失敗する場合は、「コマンドの送信時に SSH がホスト キー エラーで失敗するが、ホスト キーがなくても動作する」という問題ではなく、ホスト B が自分自身に SSH 接続できない、またはより具体的には、ホスト B の「ユーザー」がホスト B に SSH 接続できるように構成されていないという問題です。
完全を期すために、コマンド 2c を実行するとどうなるか見てみましょう。
ssh -o StrictHostKeyChecking=no -T -i /cygdrive/C/keys/id_rsa [email protected] mkdir -p /mnt/storage/new_folder
(ホストAから)?