sshpass 傳送密碼

  1. 若沒有產生公私鑰在連線的兩端進行對應,ssh 連線時必須手動輸入密碼,這在例行工作、背景執行、批次處理等工作時會無法進行。為達此目的,可以藉由 sshpass 指令用時傳送遠端主機的密碼。
  2. 安裝 sshpass 套件。
    [root@kvm8 ~]# yum install -y sshpass
    
  3. 先登入遠端主機 kvm7.deyu.wang,移除對應公鑰。也就是移除免密碼登入對應。
    [root@kvm8 ~]# ssh kvm7.deyu.wang
    Last login: Tue Feb  4 19:49:12 2014 from deyu.wang
    [root@kvm7 ~]# mv .ssh/authorized_keys /tmp
    [root@kvm7 ~]# exit
    logout
    Connection to kvm7.deyu.wang closed.
    
  4. 使用 sshpass 傳送密碼 123qwe,ssh 登入 kvm7.deyu.wang 在目錄 /root 下產生一個檔案 abc 內容為 aaaa。 遠端連線時目錄 .ssh 中有一個檔案 known_hosts 會記錄曾經連線過的信任主機,若連線主機重新安裝或更換 ip,其 host key 不同,ssh 會產生警告訊息,要求確認並刪除在 known_hosts 中的記錄,才能連線。選項 -o StrictHostKeyChecking=no 就是不進行 host key 的檢查,以避免此中斷程式的動作。
    [root@kvm8 ~]# sshpass -p123qwe ssh -o StrictHostKeyChecking=no kvm7.deyu.wang "echo aaaa > /root/abc"
    
  5. rsync 以 ssh 同步,同樣可以利用 sshpass 傳送密碼,將 b.txt 送到 kvm7.deyu.wang。
    [root@kvm8 ~]# echo bbbb > b.txt
    [root@kvm8 ~]# rsync -av -e "sshpass -p123qwe ssh" b.txt kvm7.deyu.wang:
    sending incremental file list
    b.txt
    
    sent 78 bytes  received 31 bytes  218.00 bytes/sec
    
  6. 登入 kvm7.deyu.wang 檢查檔案 abc 及 b.txt。
    [root@kvm7 ~]# cat abc
    aaaa
    [root@kvm7 ~]# cat b.txt 
    bbbb