Bash 退出SSH隧道而不关闭它

Bash 退出SSH隧道而不关闭它,bash,ssh,tunnel,Bash,Ssh,Tunnel,我正在尝试编写一个脚本来设置一组端口转发。这部分工作正常,我遇到的问题是如何建立SSH隧道,然后(基本上)在不关闭隧道的情况下将其与本地分离 #!/bin/bash # Text (Foreground) Colors norm_text='\e[0m' black_text='\e[30m' red_text='\e[31m' green_text='\e[32m' yellow_text='\e[33m' blue_text='\e[34m' magenta_text='\e[35m'

我正在尝试编写一个脚本来设置一组端口转发。这部分工作正常,我遇到的问题是如何建立SSH隧道,然后(基本上)在不关闭隧道的情况下将其与本地分离

#!/bin/bash


# Text (Foreground) Colors
norm_text='\e[0m'
black_text='\e[30m'
red_text='\e[31m'
green_text='\e[32m'
yellow_text='\e[33m'
blue_text='\e[34m'
magenta_text='\e[35m'
cyan_text='\e[36m'
lgray_text='\e[37m'
dgray_text='\e[90m'
lred_text='\e[91m'
lgreen_text='\e[92m'
lyellow_text='\e[93m'
lblue_text='\e[94m'
lmagenta_text='\e[95m'
lcyan_text='\e[96m'
white_text='\e[97m'

# Text (Background) Colors
norm_back='\e[49m'
black_back='\e[40m'
red_back='\e[41m'
green_back='\e[42m'
yellow_back='\e[43m'
blue_back='\e[44m'
magenta_back='\e[45m'
cyan_back='\e[46m'
lgray_back='\e[47m'
dgray_back='\e[100m'
lred_back='\e[101m'
lgreen_back='\e[102m'
lyellow_back='\e[103m'
lblue_back='\e[104m'
lmagenta_back='\e[105m'
lcyan_back='\e[106m'
white_back='\e[107m'
#-------------------------------

function menu() {
echo -e "\t==============="
echo -e "\t${yellow_text}Port Forwarding${norm_text}"
echo -e "\t==============="
echo -e "${green_text}"
echo -e "1.) Start Port Forwarding"
echo -e "2.) Stop Port Forwarding"
echo -e "${norm_text}"
echo -e "${red_text}5.) Exit${norm_text}"
echo -e ""
echo -en "Please enter an option: "
}
menu
read -n1 OPTION
case "$OPTION" in
    "1")
        echo -e ""
        echo -e ""
        read -p "What is your  z-id?" USER
        USER="$USER"
        ssh -N -L 6111:remote.server.org:8080 -L 6112:remote.server.org:8080 -L 6121:remote.server.org:8080 -L 6122:remote.server.org:8080 -L 6211:remote.server.org:8080 -L 6212:remote.server.org:8080 -L 6214:remote.server.org:8080 -L 6215:remote.server.org:8080 -L 6221:remote.server.org:8080 -L 6222:remote.server.org:8080 -L 6224:remote.server.org:8080 -L 6225:remote.server.org:8080 -L 6311:remote.server.org:8080 -L 6312:remote.server.org:8080 -L 6314:remote.server.org:8080 -L 6315:remote.server.org:8080 -L 6321:remote.server.org:8080 -L 6322:remote.server.org:8080 -L 6324:remote.server.org:8080 -L 6325:remote.server.org:8080 -L 6411:remote.server.org:8080 -L 6412:remote.server.org:8080 -L 6421:remote.server.org:8080 -L 6422:remote.server.org:8080 -L 7111:remote.server.org:8080 -L 7112:remote.server.org:8080 -L 7113:remote.server.org:8080 -L 7121:remote.server.org:8080 -L 7122:remote.server.org:8080 -L 7123:remote.server.org:8080 -L 7211:remote.server.org:8080 -L 7212:remote.server.org:8080 -L 7213:remote.server.org:8080 -L 7221:remote.server.org:8080 -L 7222:remote.server.org:8080 -L 7223:remote.server.org:8080 -L 7311:remote.server.org:8080 -L 7312:remote.server.org:8080 -L 7313:remote.server.org:8080 -L 7321:remote.server.org:8080 -L 7322:remote.server.org:8080 -L 7323:remote.server.org:8080 -L 7411:remote.server.org:8080 -L 7412:remote.server.org:8080 -L 7413:remote.server.org:8080 -L 7421:remote.server.org:8080 -L 7422:remote.server.org:8080 -L 7423:remote.server.org:8080 -L 7511:remote.server.org:8080 -L 7512:remote.server.org:8080 -L 7513:remote.server.org:8080 -L 7521:remote.server.org:8080 -L 7522:remote.server.org:8080 -L 7523:remote.server.org:8080 -L 7611:remote.server.org:8080 -L 7612:remote.server.org:8080 -L 7613:remote.server.org:8080 -L 7621:remote.server.org:8080 -L 7622:remote.server.org:8080 -L 7623:remote.server.org:8080 -L 8111:remote.server.org:7034 -L 8121:remote.server.org:7034 -L 8211:remote.server.org:7034 -L 8221:remote.server.org:7034 -L 8311:remote.server.org:7034 -L 8314:remote.server.org:7034 -L 8321:remote.server.org:7034 -L 8324:remote.server.org:7034 -L 8411:remote.server.org:7034 -L 8421:remote.server.org:7034 "${USER}"@tunnel.server.org
        echo -e ""
        echo -e "Local Port 6111 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6112 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6121 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6122 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6211 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6212 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6214 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6215 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6221 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6222 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6224 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6225 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6311 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6312 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6314 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6315 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6321 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6322 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6324 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6325 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6411 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6412 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6421 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 6422 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7111 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7112 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7113 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7121 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7122 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7123 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7211 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7212 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7213 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7221 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7222 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7223 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7311 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7312 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7313 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7321 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7322 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7323 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7411 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7412 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7413 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7421 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7422 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7423 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7511 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7512 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7513 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7521 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7522 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7523 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7611 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7612 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7613 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7621 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7622 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 7623 is now resolving content from \"remote.server.org:8080\""
        echo -e "Local Port 8111 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8111 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8121 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8211 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8221 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8311 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8314 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8321 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8324 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8411 is now resolving content from \"remote.server.org:7034\""
        echo -e "Local Port 8421 is now resolving content from \"remote.server.org:7034\""
        echo -e ""
        echo -e "Port Forwarding ${red_back}${yellow_text}Active${norm_text}${norm_back}:"
    ;;
esac
现在,它会提示您输入密码,端口转发隧道工作得很好,但我的脚本挂起。。。我想要一个互动菜单,比如“关闭隧道”之类的

我知道我现在有“-N”选项,即“不执行命令”。。。我已经移除了它,并尝试了一些简单的方法,比如

remote.server.org:7034 -L 8421:remote.server.org:7034  "${USER}"@tunnel.server.org "sleep 10 &"
暂停作业,然后对其进行后台处理,但这是在远程系统上对其进行后台处理,而不是在此处。。。但无论如何,它会立即崩溃

我研究了一堆,发现了“-S-O”。。。虽然我已经阅读了SSH的手册页,但我仍然不知道如何正确地实现它,或者这是否是我真正想要的


我希望这是有道理的。非常感谢你的帮助

典型的用例是将
-NTf
开关添加到命令中。从手册页开始:

-f 在命令执行之前请求ssh转到后台。[……]

-N 不要执行远程命令。这仅适用于转发端口(仅限协议版本2)

-T 禁用伪tty分配


如果您能够设法使用
ssh密钥
,则可以在后台
ssh otheroptions here&
中运行
ssh
命令,后跟
PIDOF=$。然后,在停止时,您只需
杀死$PIDOF
。如果您需要使用密码,请使用
-f
。您可以在后台运行它并分离,类似
((命令)&)&
的功能应该可以使用。我也阅读了这些内容。。。您是否能够提供一个有效的用例场景?“-f”正在将SSH命令发送到本地后台(我认为),“-N”是应该的,因为我只是在转发端口。。。我不熟悉“-T”和“伪tty”是什么或做什么。我感谢你的澄清。