项目场景: 在工作中,经常需要从本地提交节点,远程登录到其他节点上区执行一些shell命令,如果分别ssh到每台远程主机上,再去执行各个命令会很麻烦。如果可以直接在提交节点上,直接ssh到各个远程主机上去执行命令,可以省去依次登录的麻烦。 实现功能: 需要配置ssh免密码登录。可以直接跳过登录密码,直接登录进远程主机,这一点在shell脚本中执行时非常关键。 操作脚本: 新建一个shell脚本内容如下。 #!/bin/expect #设置变量 set user "holden" set host "192.168.0.80" set loginpass "123456" set cmd_prompt "]#|~]?" spawn ssh $user@$host #设置超时时间,单位是秒 set timeout 30 # -re 匹配正则表达式 expect { -re "Are you sure you want to continue connecting (yes/no)?" { send "yes\r" } -re "password:" { send "${loginpass}\r" } -re "Permission denied, please try again." { exit } } ###远程命令 expect { -re $cmd_prompt { send "./robosense_sdk.sh\r" send "exit \r" } } interact 运行: 文件名字为start.sh,运行; expect start.sh