Linux使用Except实现自动登录
在实际项目中,需要经常登录不同的服务器,这样的频繁的登录操作每次都需要输入密码,每次这样的输入非常的烦人,如果有个脚本做这个事情就好多了,在网上发现Linux有个Except可以实现这个功能,这个好东西简直拯救了一大票懒人~
Except主要进行自动化的交互,Except能够模拟用户的输入,也可以读取标准输出,这非常适合需要用户输入的场景。这里假设我有三台机器,机器信息假设如下所示,我们主要的登录脚本放在
l
o
g
i
n
.
s
h
login.sh
l
o
g
i
n
.
s
h
文件中,下面这个是我们的自动登录脚本,我们把机器信息和登录功能分独立开来
#!/bin/bash
if [ "$1" == "dev" ];then
echo "ssh -l WoDeXiaoKeAi 10.252.12.90"
./login.sh WoDeXiaoKeAi 10.152.12.90 love@@2019++YOU@@_+haha # 这里的用户名和密码都是示例,瞎写的,哈哈
fi
if [ "$1" == "test" -o "$1" == "middle" ];then
echo "ssh -l WoDeXiaoKeAi 10.252.12.91"
./login.sh WoDeXiaoKeAi 10.152.12.91 love@@2019++YOU@@_+haha
fi
if [ "$1" == "online"];then
echo "ssh -l WoDeXiaoKeAi 10.252.12.92"
./login.sh WoDeXiaoKeAi 10.152.12.92 love@@2019++YOU@@_+haha
fi
主要完成登录信息在
l
o
g
i
n
.
s
h
login.sh
l
o
g
i
n
.
s
h
里面,对于第一次连接,可能存在需要手动输入
y
e
s
/
n
o
yes/no
y
e
s
/
n
o
的情况,那么脚本需要兼容这种情况,详细脚本如下。但是在使用这个脚本之前,需要确保机器已经安装了expect、spawn等命令。关于各个关键字的含义可以看下面的参考网页
#!/usr/bin/expect
set timeout 3
set username [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh -l $username $ip
expect {
"yes/no" {send "yes\r";exp_continue}
"*password*" {send "$password\r";}
}
interact
参考