sshpass によるマルチホップ

sshpass によるマルチホップ

ゲートウェイ経由でホストに接続するために使用したいです.ssh/config。RSA キーを設定したくないので、パスワードを使用する必要があります。以前は、パスワードなしでこの種のホッピングを実行しました。今度はパスワードを使用して実行しようとしています。

私の場合、直接機能するコマンドは次のとおりです。

sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip

ゲートウェイでキー認証をすでに設定しており、その詳細は .ssh/config にあります。これを で設定するには.ssh/config、次の操作を試しました。

Host h_act
      <username, hostname, port etc.>
      ProxyCommand ssh gateway -W %h:%p
Host h
      ProxyCommand sshpass -p mypassword ssh h_act

ただし、 を試行するとssh h、 が表示されますPseudo-terminal will not be allocated as stdin is not a terminal。ssh を試して-vtt奇妙なメッセージは表示されましたが、ターミナルはありませんでした。 または がある場合、ProxyCommand のチェーンが機能することはわかっていますnetcat/ncssh -Wしかし、ここでは機能しません。 sshpass なしで最後のコマンドを試しても、同じエラーが発生します。これは、ProxyCommand が後続のコマンドに対して持っている特定の期待と関係があり、それを満たすことができないためだと思います。

何か案は?

答え1

あなたの設定は、そのワンライナーと同じではないと思います。次のようになります:

ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip 

つまり、sshpassProxyCommand 内で実行していることになります。

sshpassしかし、クライアントを疑似端末でラップして、パスワードが実際にはファイルまたは端末からのユーザー入力以外の何かから取得されるという事実を隠してしまうので、うまくいかないと思います。sshこれを行うには、クライアントが実行される前に実行する必要がありますssh

最初のワンライナーが機能するが、毎回入力するのが面倒な場合はsshpass、シェル スクリプトでラップできます。

#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"

次に、次のように実行しますsshscript myusername@myip

余談ですが、 を使用しないでください。クライアント (および) が実行されている限り、sshpass -pパスワードが出力に表示されます。環境を介してパスワードを渡すか、ファイルから読み取るには、を使用する方が適切です。pssshsshpasssshpass -esshpass -f file

関連情報