标签搜索

目 录CONTENT

文章目录

使用sshpass和expect远程模拟root用户下发指令

陈铭
2022-08-05 / 0 评论 / 0 点赞 / 574 阅读 / 379 字 / 正在检测是否收录...

sshpass

安装

yum install -y sshpass

示例

ssh远程执行命令,一般需要交互式的输入密码

sshpass -p <password> ssh -p <ssh_port> -q -o StrictHostKeyChecking=no <username>@<ip> <command>

expect

expect是用来模拟linux上的交互式操作的,实现一些键入的自动化

安装

yum install -y expect
apt install -y expect

示例

登录root并执行命令

# 编写脚本
vi root.exp

#!/usr/bin/expect -f
set timeout 20 # 脚本执行超时
spawn su # 执行命令
expect "Password:" # 出现"Password:",则发送"185123456\n",这是root的密码
send "185123456\n"
expect "root@*"
send "cat /test/test\n"
expect "root@*"
send "exit\n"

# 执行脚本(脚本需要有执行权限,chmod 777 ./root.exp)
./root.exp
# 或者
expect ./root.exp

sshpass和expect结合使用

以远程开启root的ssh登录权限为例,被远程的机器默认安装好了expect,这样才能保证sshpass的命令下发能够被执行。

# 远程开启root的ssh权限
# 其中<username>不是root用户,是普通用户,所以才需要用expect来开启root的ssh登录权限
sshpass -p <password> ssh -p <ssh_port> -q -o StrictHostKeyChecking=no <username>@<ip> /usr/bin/expect<<EOF
set timeout 20
spawn su
expect "Password:"
send "<root_password>\n"
expect "]*"
send "echo PermitRootLogin yes >> /etc/ssh/sshd_config\n"
expect "]*"
send "systemctl restart ssh\n"
expect "root@*"
send "exit\n"
EOF
0

评论区