最近公司需要首先登录跳板机relay,然后通过跳板机才能登录服务器,操作上略显麻烦。为了节省登录服务器的时间,我编写了一个简单的脚本来简化登录操作。
实现效果为在本地terminal下,执行wrelay $host
,即可自动登录到相应的主机。
在relay服务器上增加对其他服务器的免登录命令
在relay服务器上ssh到其他主机时需要输入密码,使用expect命令来登录到其他主机时通过expect脚本来实现自动输入密码并登录的功能。
在/home/$user目录下新建mybin文件夹,并将mybin文件夹添加到$PATH环境变量中,具体修改方法不展开。
在mybin目录下增加gw脚本,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/usr/bin/expect
if {$argc < 1} { puts "Usage:cmd <host>" exit 1 }
set host [lindex $argv 0] # 在这里填写要登录的用户 set username "worker" # 在这里填写要登录的密码 set password "worker"
spawn ssh $username@$host set timeout 2 expect { "*password:" { send "$password\n" } "Are you sure you want to continue connecting (yes/no)?" { send "yes\r" exp_continue } } expect "*#" interact
|
执行gw 10.1.1.8
,即可登录到对应的主机上。
本地主机免登录relay服务器,并自动登录到对应的服务器
在本地自动登录relay主机同样使用expect的方式,脚本名称为wrelay,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #!/usr/bin/expect
if {$argc < 1} { puts "Usage:cmd <remote_host>" exit 1 }
# 下面指定relay主机 set host "relay.name" # 这里输入relay的用户名 set username "" # 这里输入relay的密码 set password "" set remote_host [lindex $argv 0]
spawn ssh $username@$host set timeout 2 expect { "*password:" { send "$password\n" } "Are you sure you want to continue connecting (yes/no)?" { send "yes\r" exp_continue } } expect "*#"
sleep 0.1 # 在relay上自动登录到其他服务器主机 send "gw $remote_host\n" interact
|