
ゲートウェイ経由でホストに接続するために使用したいです.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/nc
。ssh -W
しかし、ここでは機能しません。 sshpass なしで最後のコマンドを試しても、同じエラーが発生します。これは、ProxyCommand が後続のコマンドに対して持っている特定の期待と関係があり、それを満たすことができないためだと思います。
何か案は?
答え1
あなたの設定は、そのワンライナーと同じではないと思います。次のようになります:
ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip
つまり、sshpass
ProxyCommand 内で実行していることになります。
sshpass
しかし、クライアントを疑似端末でラップして、パスワードが実際にはファイルまたは端末からのユーザー入力以外の何かから取得されるという事実を隠してしまうので、うまくいかないと思います。ssh
これを行うには、クライアントが実行される前に実行する必要がありますssh
。
最初のワンライナーが機能するが、毎回入力するのが面倒な場合はsshpass
、シェル スクリプトでラップできます。
#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"
次に、次のように実行しますsshscript myusername@myip
。
余談ですが、 を使用しないでください。クライアント (および) が実行されている限り、sshpass -p
パスワードが出力に表示されます。環境を介してパスワードを渡すか、ファイルから読み取るには、を使用する方が適切です。ps
ssh
sshpass
sshpass -e
sshpass -f file