Linux下用expect实现ssh自动登录并执行脚本

Linux下用expect实现ssh自动登录并执行脚本

 

expect不是系统自带的,需要安装:

        yum install expect

装完后才可执行以下脚本。

 

 ssh密码认证的登陆脚本:

#!/bin/bash

# 匹配提示符
CMD_PROMPT="\](\$|#)"

# 要执行的脚本
script="/root/test.sh"

username="root"
password="123456"
host="192.168.1.109"
port=22

expect -c "
	send_user connecting\ to\ $host...\r    # 空格要转义
	spawn ssh -p $port $username@$host
	expect {
    	    *yes/no* { send -- yes\r;exp_continue;}
   	    *assword* { send -- $password\r;}
	}
	expect -re $CMD_PROMPT
	send -- $script\r
	expect -re $CMD_PROMPT
	exit
"
echo "\r"

 

ssh公钥认证的登陆脚本:

 

#!/bin/bash

# 匹配提示符
CMD_PROMPT="\](\$|#)"

# 要执行的脚本
script="/root/test.sh"

username="root"
password="123456"
host="192.168.1.109"
port=22

expect -c "
	send_user connecting\ to\ $host...\r
	spawn ssh -p $port $username@$host
	expect -re $CMD_PROMPT
	send -- $script\r
	expect -re $CMD_PROMPT
	exit
"
echo "\r"
 

 

 1. send_user 是回显,相当于echo。

 2. spawn 是开启新的进程

 3. expect{  } 这是匹配上一条指令的输出,,比如上面spawn 那句执行完后,会提示你输入密码,提示语中会包含 password,因此就匹配*assword*,然后就send -- $password 把密码发过去。

 4. send 就是发指令到对端

 5. expect 内部有个exp_continue ,意思是重新匹配所在的expect,相当于while的continue

 6. expect 的 -re 表示匹配正则表达式

 

ps:expect 内部的指令的参数中特殊字符需在前面加\转义

 

类似的还可实现ftp登陆,自动上传下载文件等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值