免密碼SSH遠程執行命令
阿新 • • 發佈:2017-06-06
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遠程執行命令