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






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