SSH はコマンドの送信時にホスト キー エラーで失敗しますが、ホスト キーがなくても動作します。

SSH はコマンドの送信時にホスト キー エラーで失敗しますが、ホスト キーがなくても動作します。

私は、現在古い死にかけのサーバーで処理されているホスト キー認証による 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から)?

関連情報