私の設定は次のとおりです。
- ノード
A
は私が始める場所です - ノード
B
はゲートウェイシステムです。 - ノード
C
は宛先です。
From A
toでB
SSH公開鍵認証を設定しましたが、B
from toでC
それを行うことはできません。
したがって、ノードはA
次の注文を使用し、実際には別のコンピュータ(Ubuntu 14.04)で動作します。
sshpass -p secretpass ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
...しかし、別のコンピュータ(Ubuntu 16.04 - 関連性があるかどうか疑問ですが)を使用して別の場所で試してみると、呼び出しは何も出力なしでsshpass
すぐに返され、終了コード(から取得echo $?
)は6です。
さらに恥ずかしいことは、これらのステップを個別に実行することで成功することです。
A: $ ssh username@B (directly access B without being prompted for password)
B: $ ssh username@C (prompted for password, provided 'secretpass')
C: $ (reached my destination)
答え1
さて、何が問題なのかわかります。このコンピュータでこのスクリプトを初めて使用するため、まず次のことを行う必要があります(なしsshpass
)。
ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
その後、メッセージが表示されました。
ホスト 'C <プロキシ コマンドのホスト IP なし>)' の信頼性を確認できません。
RSAキー指紋はSHA256:…です。
引き続き接続しますか(Y/N)?はい
警告:「C」(RSA)が既知のホストのリストに永久に追加されました。
...上記の内容を受け入れた後、追加の質問なしに質問で要求された注文を使用することができました。
したがって、この失敗は、注文が一度だけ表示される真偽のプロンプトに応答できないためです。
sshpass
マニュアルページ(戻り値セクション)から:
他のプログラムと同様に、sshpassは成功時に0を返します。失敗した場合は、次の戻りコードが使用されます。
[...]
6
ホスト公開鍵が不明です。 sshpass は新しいキーを確認せずに終了します。
答え2
最初に指紋を承認せずに機能させるには、次のようにします。
ssh ... -o "StrictHostKeyChecking=no"