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
    
    
    参考
   
 
