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
评论区