Ubuntu本地shell脚本ssh到远程服务器并执行命令(expect解释器)

项目场景:

在工作中,经常需要从本地提交节点,远程登录到其他节点上区执行一些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

猜你喜欢

转载自blog.csdn.net/m0_54792870/article/details/113108695