ジャンプホストを使用する複数のSSHコマンドを含むスクリプトがあります。毎回ジャンプとターゲットサーバーのパスワードを入力したいと思いますが、悲しいことにsshpass
「ネスト」を試してみましたが、sshpass
成功しなかったようです。
sshpass -p "JumpPass" sshpass -p "ServerPass" ssh -J user@jump admin@server
多くのパスワードを「入れ子にする」ことはできますかsshpass
?それとも別のパスワードを提供する特定のオプションはありますか?
答え1
sshpassを使用して2つのパスワードを渡すことができます。 2つのsshpass呼び出しごとに2つの異なるパスワードソース(-e
および)を使用する必要があります。-d
env SSHPASS="JUMP_PASSWORD" \
sshpass -d 123 ssh \
-o ProxyCommand="sshpass -e ssh -W %h:%p JUMP_USER@JUMP_HOST" \
TARGET_USER@TARGET_HOST \
123<<<TARGET_PASSWORD
上記のコード例では、ジャンプホストはsshpass()に提供されたJUMP_PASSWORDを使用し、ターゲット-e
ホストはsshpass()に提供されたTARGET_PASSWORDを使用します-d
。
sshpass()を使用してパスワードを提供することもできますが、-p
パスワードはプロセスリスト(ps)に表示されるため安全ではありません。上記の例では、システムプロセスリストの出力にパスワードが表示されないようにsshpassを使用しています。
環境変数パスワードソース(sshpass -e)は、ジャンプホストのProxyCommandで使用する必要があります。環境変数は "-o ProxyCommand"呼び出しでsshpassに読み込まれますが、ファイル記述子ソース(sshpass -d)を使用している場合は、ProxyCommand参照値にパスワードを指定する必要があります。出力。 (例-o ProxyCommand="sshpass -d 124 ssh -W %h:%p JUMP_USER@JUMP_HOST 124<<<JUMP_PASSWORD"
:)<-だからこれは欠点です。
注:この方法では、sshpass
JUMP_HOSTはインストールされません。
修正する このソリューションはrsyncでも動作します。
env SSHPASS="JUMP_PASSWORD" \
rsync -v -a \
-e "sshpass -d 123 ssh \
-o ProxyCommand=\"sshpass -e ssh -W %h:%p USER@JUMP_HOST\" USER@TARGET_HOST" \
:/remote/directory/ /local/directory/ \
123<<<TARGET_PASSWORD
スーパーユーザーに対する私の答えを参照してください。https://superuser.com/questions/1646074/why-rsync-with-jump-host-and-sshpass-not-working/1689136#1689136
答え2
私は通常muruが言及したProxyCommandを使用します。
また、認証にパスワードの代わりにキーを使用するのはどうですか? {Linux の使用を開始したときは常にパスワードを使用していましたが、一度キーを使用すると再び戻ることはできません。}
これを私のSSHプロファイルの下に置き、SSHを介してサーバーに直接接続できますssh server
。
Host server
ControlMaster auto
ProxyCommand ssh -W %h:%p -i your_key_for_Jump user@jump
IdentityFile your_key_for_server_if_not_idrsa
User ssh_user_for_server