对于每次登陆都要跑到密码机上获取密码,然后跑到跳板机上登陆到外网机器上,实在有些繁琐,但这为了安全着想,无可厚非;但为了方便,有人写了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 jy@tiaobanji.abc.com expect { "yes/no" {send "yes\r";exp_continue;} "jy@tiaobanji.abc.com'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 jy@tiaobanji.abc.com expect { "yes/no" { send "yes\r"; expect "password:" {send "adcd1234\r"} } "password:" {send "abcd1234\r"} } #expect eof interact