免密码SSH远程执行命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了免密码SSH远程执行命令相关的知识,希望对你有一定的参考价值。

我们经常需要在远程主机上执行一些命令,为了方便,可以使用一些方法来实现免密码SSH登录,比如:公钥授权的方式。但是这种方式有一些缺陷,它是针对单台机器做的授权,也就是说,如果换了一台机器,授权就失效了,还是需要手动输入密码。

其实还有另外一种通用性比较强的方式: expect。

 

expect是一种模拟人机交互的程序。可以用它来模拟人输入密码的过程。

 

使用说明:

1.将下列代码保存为一个文件,比如 remoteExecute :

#!/usr/bin/expect -f
set timeout -1
set server [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
set command [lindex $argv 4]
spawn ssh -p $port [email protected]$server $command
expect {
"(yes/no)?" { send "yes\r"; exp_continue }
"password:" { send "$password\r"; exp_continue }
eof
}
catch wait result
exit [lindex $result 3]

 

2. 然后在要使用的机器上安装 expect 程序( yum install -y expect )

 

3. 执行下列命令连接:

expect -f <上述remoteExecute文件的路径> <远程机器的IP地址> <ssh服务的端口> <用户名> <密码> <要执行的命令>

比如,在remoteExecute文件所在的目录执行:

expect -f remoteExecute 192.168.100.3 21069 root ‘#[email protected]!#$!‘ ‘ls /root‘

就会在当前shell 列出 192.168.100.3 的 /root 目录。

 


以上是关于免密码SSH远程执行命令的主要内容,如果未能解决你的问题,请参考以下文章

(转) linux实现ssh免密码登录的正确方法

使用sshpass和ssh实现无密码自动远程登录

linux ssh scp免密码

linux系统ssh免密钥登录配置

SSH 无密码远程执行脚本

远程登录ssh免密码