對於每次登陸都要跑到密碼機上獲取密碼,然後跑到跳板機上登陸到外網機器上,實在有些繁瑣,但這爲了安全着想,無可厚非;但爲了方便,有人寫了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