expect实现ssh自动登陆

   对于每次登陆都要跑到密码机上获取密码,然后跑到跳板机上登陆到外网机器上,实在有些繁琐,但这为了安全着想,无可厚非;但为了方便,有人写了vbs通过SecureCRT接口登陆,在win下很方便,在linux下可以用expect实现不用输密码的自动ssh登陆。

   原理:本地机器通过expect登陆跳板机,提示输入yes或者密码直接发送,登上跳板机后,再次发送ssh登陆外网机器命令,提示yes或者密码自动发送即可。

代码如下:

$ cat rash.sh
#!/bin/bash
if [ $# -ne 1 ];then
    echo "Usage:$(basename $0) <hostname>"
    exit
fi
host=$1
pwd=`grep $host -w pass.txt|awk '{print $NF}'`
./s.exp $host $pwd
$ cat s.exp
#!/usr/bin/expect
set host [lindex $argv 0]
set pwd [lindex $argv 1]
spawn ssh [email protected]
expect {
    "yes/no" {send "yes\r";exp_continue;}
    "[email protected]'s password:" {send "abcd1234\r";exp_continue;}  #登陆跳板机
    "jy@" {send "ssh root1@$host.abc.com\r";exp_continue}    #登上跳板机后
    "password:" {send "$pwd\r";exp_continue}
    "Permission denied" {exit}    #用户或密码错误退出
    }
interact    #交互

将密码保存在本地机器的pass.txt中即可。

这里就不截图执行过程了。

如果只是从本地登上跳板机,代码可以如下:

$ cat e.exp
#!/usr/bin/expect
spawn ssh [email protected]
expect {
    "yes/no"
        { send "yes\r";
          expect "password:" {send "adcd1234\r"}
        }
    "password:" {send "abcd1234\r"}
}
#expect eof
interact






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章