支持自动重连的ssh tunnel脚本,sshtunnel脚本,在内网服务器架了一个SS
分享于 点击 44943 次 点评:33
支持自动重连的ssh tunnel脚本,sshtunnel脚本,在内网服务器架了一个SS
在内网服务器架了一个SSH Tunnel服务供同事使用,但是经常由于网络原因造成中断,需要不断登录上去重连。网上找到的方案主要分两种:autossh –这种必须通过ssh key的方式登录。由于买的shell帐号只能用于做Tunnel,并不能真正的登入进去,无法在服务器端生成公钥,所以这种方案不行;通过expect发送密码 –方案是可行的,但是LinuxToy上的这个脚本也是通过执行远程命令来监测SSH连接,同上面的原因,我们买的shell帐号只能做Tunnel,不能执行命令;没办法,又是自己写了一个脚本,通过nc来监测:登录内网服务器,将这个脚本保存为autossh.sh,打开screen,然后执行:authssh.sh[user@]remote[:port],再输入ssh密码。正常情况下运行脚本,成功连接服务器之后会监听内网服务器的7070端口。注意需要安装 expect、nc以及screen。
[Shell/批处理]代码
#!/bin/shif [ "$1x" != "connectx" ]; then if [ -z $1 ]; then echo "Usage: $0 [username@]host[:port]" 2>&1 exit 0 fi echo -n "Password: " stty -echo; read pass; stty echo; echo "" expect -- << EOF spawn $0 connect $1 while 1 { expect { "password:" { send "$pass\r" } "yes/no" { send "yes\r" } "Permission denied" { puts "Password error." break } } }EOFelse shift port=`echo $1 | perl -nle 'print /\:(\d+)$/ ? $1 : "22"'` while [ 1 ] do ssh -p $port -CN -D 0.0.0.0:7070 $1 target "while nc -zv localhost 7070; do sleep 20; done" sleep 20 donefi
用户点评