一、安装
sudo apt-get install expect
脚本示例一
#!/usr/bin/expect
# 设置远程主机的信息
set remote_host "ip"
set remote_user "user"
set remote_password "password"
set command_to_run "command"
# 执行 SSH 登录
spawn ssh $remote_user@$remote_host
# 匹配远程主机首次连接的提示,接受并保存到 known_hosts
expect {
"yes/no" {
send "yes\r"
exp_continue
}
eof
}
# 匹配登录提示,发送密码
expect "password:"
send "$remote_password\r"
# 匹配命令提示符,发送要执行的命令
expect "$ "
send "$command_to_run\r"
# 等待命令执行完成
expect "$ "
# 可以在这里处理命令的输出,如打印到终端或保存到文件
# 退出 SSH 会话
send "exit\r"
# 等待退出完成
expect eof
示例二:脚本和expect 结合
#!/bin/bash
set -e
ip1="10.42.0.21"
hosts1=user@${ip1}
ssh-keygen -f "/home/hq/.ssh/known_hosts" -R ${ip1}
sshpass -p 'password' ssh-copy-id -o StrictHostKeyChecking=no $hosts1
expect -c "
spawn ssh $hosts2
send \"mv app app_bak\r\"
expect eof
"
示例三
当有多条命令,如果用send叠加,有时候会执行失败,最好采用shell命令拼接多条命令
expect -c "
spawn ssh $hosts2
send \"mv /home/mazu/app/bin/adb_app /home/mazu/app/bin/adb_app_bak || \
cp rule.json rule.json_bak\r\"
expect eof
"