Jamyy's Weblog

sshpass 操作範例

by Jamyy on 八月.30, 2013, under Linux

通常我們以無密碼保護的金鑰來達成免密碼、無互動 (non-interactive) 的 ssh 登入

$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub myaccount@my.linux.host
$ ssh myaccount@my.linux.host (免輸入密碼直接登入)

除了這個方式之外, sshpass 指令也能實現無互動登入, 適合應用在自動化腳本作業

安裝 sshpass

$ sudo apt-get install sshpass

sshpass 操作範例

密碼直接打在 -p 參數後面
$ sshpass -p 'mypassword' ssh myaccount@my.linux.host
$ sshpass -p 'mypassword' sftp myaccount@my.linux.host
$ sshpass -p 'mypassword' scp myaccount@my.linux.host:/path/to/file ./
$ sshpass -p 'mypassword' rsync -a -v myaccount@my.linux.host:/path ./

密碼存放在檔案裡面
$ echo "mypassword" > ~/.mypasswd
$ sshpass -f ~/.mypasswd ssh myaccount@my.linux.host

密碼放在環境變數
$ SSHPASS="mypassword" sshpass -e ssh myaccount@my.linux.host

$ export SSHPASS="mypassword"
$ sshpass -e ssh myaccount@my.linux.host
$ unset SSHPASS

使用 stdin 傳遞密碼
$ echo "mypassword" | sshpass -d 0 ssh myaccount@my.linux.host "commands"

$ vi test.sh

#!/bin/bash

if [ "$1" = "AcTiOn" ]; then
   read i
   echo $i | sshpass -d 0 ssh myaccount@my.linux.host "commands"
   exit
fi

if [ -e "$1" ]; then
   cat $1 | $0 AcTiOn
fi

$ sh ./test.sh ~/.mypasswd

讓首次 ssh 連線不出現提示訊息

測試 "首次連線": 把 my.linux.host 從 ~/.ssh/known_hosts 移除
$ ssh-keygen -f ~/.ssh/known_hosts -R my.linux.host

此時 ssh 會出現確認訊息
$ ssh myaccount@my.linux.host

The authenticity of host 'my.linux.host (192.168.1.1)' can't be established.
RSA key fingerprint is 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff.
Are you sure you want to continue connecting (yes/no)? (回答 no 或 Ctrl + C 脫離)

以下方法讓首次 ssh 連線不出現提示訊息, 自動將連線目標加入 ~/.ssh/known_hosts
$ ssh -o StrictHostKeyChecking=no myaccount@my.linux.host

$ sudo vi /etc/ssh/ssh_config

StrictHostKeyChecking no

$ ssh myaccount@my.linux.host

避免密碼記錄在 history

方式一

先停止 history 記錄
$ set +o history

進行 sshpass -p 相關操作

最後再恢復 history 記錄
$ set -o history

方式二

直接進行 sshpass -p 相關操作

清除操作記錄
$ true > ~/.bash_history
$ history -c

方式三

$ export HISTCONTROL=ignorespace

$ export HISTCONTROL=ignoreboth

$ (空一格) sshpass -p密碼 ...

Ref:



:, , , ,