身为程序员,一定要懒。懒,是懒在多用脚本实现一些重复操作
在登录服务器时,可能需要无数次的敲ssh xxx@巴拉巴拉巴拉,然后因为没有SSH秘钥,又要输入密码,然后进去某台服务器,你又可能只需要修改某一台服务器的某个文件夹下的文件
正常的bash是不包含判断当前文字然后根据结果输出相关结果的,所以这时使用expect来处理该段逻辑:
//mac
$brew install expect
这时候可以使用expect写一段脚本来自动执行这段东西
$sudo vim /usr/local/bin/loginDev
#!/usr/bin/expect -f
set timeout 3; //设置脚本单次执行的超时时间为3秒
set host [lindex $argv 0]; //从输入中获取host
set password "password"; //default password
if { "$host" == "111" || "$host" == "112" } {
puts "root";
set password "password";
spawn ssh build@172.16.0.$host;
} elseif { "$host" == "113" } {
puts "root";
set password "password6";
spawn ssh root@172.16.0.$host;
} else {
puts "username";
spawn ssh username@172.16.0.$host;
}
expect { //等待执行
//首次链接服务器时可能会出现的选择,如果出现,则输入yes后继续等待下一条命令
"*yes/no*" {send "yes\r"; exp_continue};
//如果碰到需要输入密码,则将当前设置的password输入,后停留在当前命令
"*password*" {send "$password\r"; interact};
//如果已经链接当前服务器,则直接输出当前命令,查看日志
"*report@114*" {send "less /tmp/walle/walle-`date +%Y%m%d`.log\r"; interact};
//如果连接到当前服务器,则直接打开nginx目录
"*nginx01*" {send "cd /etc/nginx\r"; interact};
}
#expect eof
该文件保存后,
$chmod +x /usr/local/bin/loginDev
之后
$vim ~/.bash_profile
将该文件写成命令方法:
function dv() {
loginDev $1;
}
$source ~/.bash_profile
后,就可以使用dv xxx来直接登录服务器了~