1. 程式人生 > >免密碼SSH遠程執行命令

免密碼SSH遠程執行命令

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 $user@$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 ‘#$@!#$!‘ ‘ls /root‘

就會在當前shell 列出 192.168.100.3 的 /root 目錄。


免密碼SSH遠程執行命令