マルチホップに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/ncProxyCommandチェーンが1つしかない場合にssh -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

関連情報