Linux使用Except实现自动登录

  • Post author:
  • Post category:linux




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



参考


  1. Linux Expect 简介和使用实例



版权声明:本文为whgyxy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。