sshpass:一個很棒的免交互 SSH 登錄工具,但不要用在生產服務器上
在大多數情況下,Linux 係統管理員使用 SSH 登錄到程 Linux 服務器時,要麼是通過密碼,要麼是無密碼 SSH 登錄或基於密鑰的 SSH 身份驗證。
如果你想自動在 SSH 登錄提示符中提供密碼和用戶名怎麼辦?這時 sshpass 就可以幫到你了。
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
sshpass 與 ssh 一起使用,使用下麵的命令可以查看 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 – 使用 SSH 遠程登錄 Linux
但是,為了防止在屏幕上顯示密碼,可以使用 -e
標誌,並將密碼作為 SSHPASS
環境變量的值輸入,如下所示:
$ export SSHPASS='my_pass_here'
$ echo $SSHPASS
$ sshpass -e ssh aaronkilik@10.42.0.1 'df -h'
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 – 在登錄時提供密碼文件
你也可以使用 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 公鑰認證機製。
原文發布時間為:2017-01-03
本文來自雲棲社區合作夥伴“Linux中國”
最後更新:2017-05-31 11:03:38
上一篇:
與安卓對接接口中文亂碼的問題
下一篇:
《Spring實戰(第4版)》——2.3 通過Java代碼裝配bean
自己寫的在服務器上一段重試次數的程序,對於TAIR操作需要加樂觀鎖版本號防止集群上數據安全
Flink - Juggling with Bits and Bytes
通過壓測工具Jmeter來評測函數計算的性能表現
cacti添加監控服務器
百世赴美IPO擬募7.5億美元,“另類”大佬周韶寧迎來新冒險
《精通Spring MVC 4》——第1章 快速搭建Spring Web應用 1.1Spring Tool Suite簡介
webview使用sslError解決https跳轉報錯的問題
阿裏雲PAI將神經機器翻譯訓練效率提升5倍
VB6下BASE64轉換
SQL語句中的case when語法以及Oracle中的類似方法