我目前正在编写一个用于创建 SSH 隧道的 Bash 脚本。完成此操作后,我希望该脚本打开一个新的本地 (!) 交互式 shell,以便我可以在打开 SSH 隧道的情况下在系统上工作。
一旦我输入,exit
本地 shell 就应该关闭,而原始脚本将继续运行。
我目前的方法基本上是这样的:
#!/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}
到目前为止,一切正常 - 除了运行本地 shell。我确实得到了一个 shell,我甚至可以在其中输入内容,但是当我点击 时什么也没有发生<Return>
。
知道我做错了什么吗?
答案1
您需要使用-f
,这样连接一旦建立就会进入后台。然后您就不需要&
:
ssh -Nf -L xxx:xxx user@ip
并且处理应该进入你的bash
。