sshpass调用ssh建立隧道不挂后台
需求:每次使用动态的用户名密码登陆ssh并建立端口转发。
为了能够使用脚本自动建立隧道,不用手工输入密码,需要用到sshpass这个命令(需额外安装),组合后命令如下:
sshpass -p sshPassword ssh -p sshPort -L localPort:targetHost:targetPort user@sshHost -Nf
sshpass -p指定密码后跟原有ssh命令。
在不使用sshpass手动输入密码的情况下,ssh使用-f参数可以让隧道建立后挂到后台,隧道依旧能用。
使用sshpass命令后,自动输入密码,但隧道先建立然后自动马上断开了。
解决办法:不使用ssh的-f参数,通过nohup的方式让sshpass挂到后台
nohup sshpass -p xxx ssh .... &
原因猜测:
sshpass后跟ssh命令,ssh启动的进程为sshpass的子进程,ssh命令挂后台后sshpass继续往下执行,由于没有任务sshpass进程退出了,sshpass进程退出后子进程ssh建立的隧道也被kill了。