Linux使用Except实现自动登录

在实际项目中,需要经常登录不同的服务器,这样的频繁的登录操作每次都需要输入密码,每次这样的输入非常的烦人,如果有个脚本做这个事情就好多了,在网上发现Linux有个Except可以实现这个功能,这个好东西简直拯救了一大票懒人~

Except主要进行自动化的交互,Except能够模拟用户的输入,也可以读取标准输出,这非常适合需要用户输入的场景。这里假设我有三台机器,机器信息假设如下所示,我们主要的登录脚本放在 l o g i n . s h login.sh login.sh 文件中,下面这个是我们的自动登录脚本,我们把机器信息和登录功能分独立开来

#!/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 login.sh 里面,对于第一次连接,可能存在需要手动输入 y e s / n o yes/no yes/no 的情况,那么脚本需要兼容这种情况,详细脚本如下。但是在使用这个脚本之前,需要确保机器已经安装了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
参考
  1. Linux Expect 简介和使用实例
Logo

更多推荐