对于每次登陆都要跑到密码机上获取密码,然后跑到跳板机上登陆到外网机器上,实在有些繁琐,但这为了安全着想,无可厚非;但为了方便,有人写了vbs通过SecureCRT接口登陆,在win下很方便,在linux下可以用expect实现不用输密码的自动ssh登陆。
原理:本地机器通过expect登陆跳板机,提示输入yes或者密码直接发送,登上跳板机后,再次发送ssh登陆外网机器命令,提示yes或者密码自动发送即可。
代码如下:
$ cat rash.sh#!/bin/bashif [ $# -ne 1 ];then echo "Usage:$(basename $0)" exitfihost=$1pwd=`grep $host -w pass.txt|awk '{print $NF}'`./s.exp $host $pwd$ cat s.exp#!/usr/bin/expectset host [lindex $argv 0]set pwd [lindex $argv 1]spawn ssh jy@tiaobanji.abc.comexpect { "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/expectspawn ssh jy@tiaobanji.abc.comexpect { "yes/no" { send "yes\r"; expect "password:" {send "adcd1234\r"} } "password:" {send "abcd1234\r"}}#expect eofinteract