私は現在、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>
を押しても何も起こりません。
私が間違っていることについて何か考えはありますか?
-f
を使用して、接続が確立されるとバックグラウンドに移行するようにする必要があります。その場合、&
は必要ありません:
ssh -Nf -L xxx:xxx user@ip
処理はbash
に入るはずです。