欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

支持自动重连的ssh tunnel脚本,sshtunnel脚本,在内网服务器架了一个SS

来源: javaer 分享于  点击 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
相关栏目:

用户点评