天天看點

不适用expect 做到ssh免密碼輸入

原文連結 http://xiezhenye.com/2014/08/%E4%B8%8D%E4%BD%BF%E7%94%A8-expact-%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%8A%A8%E5%8C%96-ssh-%E5%AF%86%E7%A0%81%E8%AE%A4%E8%AF%81.html

一般來說,自動化通過 ssh 執行操作或者通過 scp 傳檔案首先得過 ssh 認證這一關。采用公鑰認證是最友善安全的方式。但是有時候不得不使用密碼認證。而 ssh 預設是直接讀寫終端來輸出提示資訊和讀入密碼的,是以沒法直接用

 echo password | ssh ... 

的方式來認證。expact 是最常用的用于解決這類問題的工具。但是這玩意實在是很不好用,也不能保證一定安裝過。

好在 ssh 還是開了一扇窗,讓我們可以實作這點。ssh 有個環境變量,SSH_ASKPASS ,設定了這個環境變量,并且目前會話不是終端時,ssh 在認證時會啟動這個程式,從這個程式的标準輸出來讀取密碼。這個功能本來是用于圖形終端的,是以還要設定另一個環境變量 DISPLAY=’none:0′,讓 ssh 不要試圖通路 X11 。至于讓程序脫離終端,使用 setsid 就可以了。下面這個例子就展示了自動化實作密碼認證并執行指令。

[[email protected] ~]$ cat password.sh 
#!/bin/bash
echo 'helloworld'
[[email protected] ~]$ echo  'echo BEGIN!; ls /' | setsid env SSH_ASKPASS='/home/xluren/password.sh' DISPLAY='none:0' ssh [email protected]
Pseudo-terminal will not be allocated because stdin is not a terminal.
BEGIN!
bin
boot
data0
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
[[email protected] ~]$ 
           

繼續閱讀