Linux中國

sshpass:一個很棒的免交互 SSH 登錄工具,但不要用在生產伺服器上

sshpass 是一個簡單、輕量級的命令行工具,通過它我們能夠向命令提示符本身提供密碼(非互動式密碼驗證),這樣就可以通過 cron 調度器執行自動化的 shell 腳本進行備份。

ssh 直接使用 TTY 訪問,以確保密碼是用戶鍵盤輸入的。 sshpass 在專門的 tty 中運行 ssh,以誤導 ssh 相信它是從用戶接收到的密碼。

重要:使用 sshpass 是最不安全的,因為所有系統上的用戶在命令行中通過簡單的 「ps」 命令就可看到密碼。因此,如果必要,比如說在生產環境,我強烈建議使用 SSH 無密碼身份驗證

在 Linux 中安裝 sshpass

在基於 RedHat/CentOS 的系統中,首先需要啟用 EPEL 倉庫並使用 yum 命令安裝它。

# yum install sshpass
# dnf install sshpass    [Fedora 22 及以上版本]

在 Debian/Ubuntu 和它的衍生版中,你可以使用 apt-get 命令來安裝。

$ sudo apt-get install sshpass

另外,你也可以從最新的源碼安裝 sshpass,首先下載源碼並從 tar 文件中解壓出內容:

$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install 

如何在 Linux 中使用 sshpass

sshpassssh 一起使用,使用下面的命令可以查看 sshpass 的使用選項的完整描述:

$ sshpass -h

下面為顯示的 sshpass 幫助內容:

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename   Take password to use from file
-d number     Use number as file descriptor for getting password
-p password   Provide password as argument (security unwise)
-e            Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-h            Show help (this screen)
-V            Print version information
At most one of -f, -d, -p or -e should be used

正如我之前提到的,sshpass 在用於腳本時才更可靠及更有用,請看下面的示例命令。

使用用戶名和密碼登錄到遠程 Linux ssh 伺服器(10.42.0.1),並檢查文件系統磁碟使用情況,如圖所示。

$ sshpass -p 'my_pass_here' ssh aaronkilik@10.42.0.1 'df -h' 

重要提示:此處,在命令行中提供了密碼,這是不安全的,不建議使用此選項。

sshpass - Linux Remote Login via SSH

sshpass – 使用 SSH 遠程登錄 Linux

但是,為了防止在屏幕上顯示密碼,可以使用 -e 標誌,並將密碼作為 SSHPASS 環境變數的值輸入,如下所示:

$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh aaronkilik@10.42.0.1 'df -h' 

sshpass - Hide Password in Prompt

sshpass – 在終端中隱藏密碼

注意:在上面的示例中,SSHPASS 環境變數僅用於臨時目的,並將在重新啟動後刪除。

要永久設置 SSHPASS 環境變數,打開 /etc/profile 文件,並在文件開頭輸入 export 語句:

export SSHPASS='my_pass_here'

保存文件並退出,接著運行下面的命令使更改生效:

$ source /etc/profile 

另外,也可以使用 -f 標誌,並把密碼放在一個文件中。 這樣,您可以從文件中讀取密碼,如下所示:

$ sshpass -f password_filename ssh aaronkilik@10.42.0.1 'df -h'

sshpass - Supply Password File to Login

sshpass – 在登錄時提供密碼文件

你也可以使用 sshpass 通過 scp 傳輸文件或者 rsync 備份/同步文件,如下所示:

------- Transfer Files Using SCP ------- 
$ scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html
------- Backup or Sync Files Using Rsync ----$ rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

更多的用法,建議閱讀 sshpass 的 man 頁面,輸入:

$ man sshpass

在本文中,我們解釋了 sshpass 是一個非互動式密碼驗證的簡單工具。 雖然這個工具可能是有幫助的,但還是強烈建議使用更安全的 ssh 公鑰認證機制。

請在下面的評論欄寫下任何問題或評論,以便可以進一步討論。

作者簡介:Aaron Kili 是一位 Linux 和 F.O.S.S 愛好者,未來的 Linux 系統管理員,web 開發人員, 還是 TecMint 原創作者,熱愛電腦工作,並樂於分享知識。

via: http://www.tecmint.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/

作者:Aaron Kili 譯者:geekpi 校對:jasminepeng

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國