幫助中心
技術(shù)運(yùn)維百科
如何自動化認(rèn)證ssh密碼
2017-07-21 13:46:31

一般來說,自動化通過 ssh 執(zhí)行操作或者通過 scp 傳文件首先得過 ssh 認(rèn)證這一關(guān)。采用公鑰認(rèn)證是最方便安全的方式。但是有時(shí)候不得不使用密碼認(rèn)證。而 ssh 默認(rèn)是直接讀寫終端來輸出提示信息和讀入密碼的,所以沒法直接用 echo password | ssh ... 的方式來認(rèn)證。expact 是最常用的用于解決這類問題的工具。但是這玩意實(shí)在是很不好用,也不能保證一定安裝過。 好在 ssh 還是開了一扇窗,讓我們可以實(shí)現(xiàn)這點(diǎn)。ssh 有個(gè)環(huán)境變量,SSH_ASKPASS ,設(shè)置了這個(gè)環(huán)境變量,并且當(dāng)前會話不是終端時(shí),ssh 在認(rèn)證時(shí)會啟動這個(gè)程序,從這個(gè)程序的標(biāo)準(zhǔn)輸出來讀取密碼。這個(gè)功能本來是用于圖形終端的,所以還要設(shè)置另一個(gè)環(huán)境變量 DISPLAY=’none:0′,讓 ssh 不要試圖訪問 X11 。至于讓進(jìn)程脫離終端,使用 setsid 就可以了。下面這個(gè)例子就展示了自動化實(shí)現(xiàn)密碼認(rèn)證并執(zhí)行命令。

echo? 'echo BEGIN!; ls /' | setsid env SSH_ASKPASS='/root/pswd.sh' DISPLAY='none:0' ssh root@127.0.0.1 2>&1 Pseudo-terminal will not be allocated because stdin is not a terminal. BEGIN! bin boot data dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var 例子里的 /root/pswd.sh 只需要簡單輸出密碼,并確保當(dāng)前用戶可執(zhí)行就可以了。比如 #!/bin/bash echo 'PASSWORD'

?

新客優(yōu)惠
特價(jià) 酷睿i3系列
性價(jià)比熱銷推薦,年銷量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請免費(fèi)產(chǎn)品試用服務(wù)
立即申請