現在、SSH トンネルを作成する Bash スクリプトを作成しています。これが完了したら、スクリプトで新しいローカル (!) 対話型シェルを開き、SSH トンネルを開いた状態でシステムで作業できるようにしたいと思います。
入力するとexit
ローカル シェルが閉じられ、元のスクリプトが引き続き実行されます。
私の現在のアプローチは基本的に次のようになります。
#!/usr/bin/env bash
set -e
ssh -N user@ip -L xxx:xxx &
SSH_CONNECTION=${!}
trap "kill ${SSH_CONNECTION}" ERR
sleep 3
bash -i
kill ${SSH_CONNECTION}
これまでのところ、ローカル シェルの実行を除いて、すべて正常に動作しています。実際にシェルが取得され、入力もできますが、 を押しても何も起こりません<Return>
。
何が間違っているのか分かりますか?
答え1
-f
接続が確立されるとバックグラウンドに移行するように、を使用する必要があります。その後、 は必要ありません&
。
ssh -Nf -L xxx:xxx user@ip
そして、処理は に送られるはずですbash
。