如何使得執行scp命令時不須要輸入用戶密碼

        最近在編寫定時自動執行的shell腳步中遇到一個問題。在該腳步中,須要使用scp命令將本地的文件複製到另外一臺機器中備份。但一般執行scp命令後都須要輸入用戶密碼,這樣在定時自動執行的shell腳步中就不適用了。本人的第一直覺就是創建無密碼用戶,在scp命令中使用該用戶就不須要輸入用戶密碼了。如下爲了討論方便,咱們將執行scp命令的機器稱爲Client,scp命令操做的遠端機器稱爲Server。  shell

SCP命令使用說明 安全

首先,我經過如下命令將機器Server上root的密碼刪除,即便root變爲無密碼用戶。 ssh

[root@Server root]# passwd -d root
Removing password for user root.
passwd: Success
[root@Server root]#
爲了確認root已經變爲無密碼用戶,登陸試試。

Red Hat Linux release 8.0 (Psyche)
Kernel 2.4.18-14 on an i686

Server login: root
Last login: Fri Sep 14 16:40:08 on tty1
[root@Server root]#
確實root登陸時已經不須要密碼了。
而後,咱們從機器Client複製一個文件到機器Server。

[root@Client root]# scp -p text root@192.168.3.206:/root
root@192.168.3.206's password:                      <-- 直接輸入回車
Permission denied, please try again.                   <-- 被拒絕
root@192.168.3.206's password:                         <-- 輸入任意字符
        text                 100% |**************************|    19       00:00
[root@Client root]#
    從測試結果可知,即便root變爲無密碼用戶,scp命令在執行時也會提示輸入密碼。更奇怪的是在提示輸入密碼時,直接輸入回車被拒絕了。但輸入其它任意字符後輸入回車確認就經過認證了。
    後來在Internet中查找相關資料,有資料[1]介紹在兩臺機器的兩個用戶之間創建安全的信任關係後,可實現執行scp命令時不須要輸入用戶密碼。我根據該資料介紹的方法測試成功了。
    如下是在機器Client的root和機器Server的root之間創建安全信任關係的步驟:
    1. 在機器Client上root用戶執行ssh-keygen命令,生成創建安全信任關係的證書。 

[root@Client root]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):            <-- 直接輸入回車
Enter same passphrase again:                           <-- 直接輸入回車
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
        49:9c:8a:8f:bc:19:5e:8c:c0:10:d3:15:60:a3:32:1c root@Client
[root@Client root]#
注意:在程序提示輸入passphrase時直接輸入回車,表示無證書密碼。
    上述命令將生成私鑰證書id_rsa和公鑰證書id_rsa.pub,存放在用戶家目錄的.ssh子目錄中。
    2. 將公鑰證書id_rsa.pub複製到機器Server的root家目錄的.ssh子目錄中,同時將文件名更換爲authorized_keys。

[root@Client root]# scp -p .ssh/id_rsa.pub root@192.168.3.206:/root/.ssh/authorized_keys
root@192.168.3.206's password:          <-- 輸入機器Server的root用戶密碼
        id_rsa.pub           100% |**************************|   218       00:00
[root@Client root]#
  在執行上述命令時,兩臺機器的root用戶之間還未創建安全信任關係,因此還須要輸入機器Server的root用戶密碼。
    通過以上2步,就在機器Client的root和機器Server的root之間創建安全信任關係。下面咱們看看效果:

[root@Client root]# scp -p text root@192.168.3.206:/root
        text                 100% |**************************|    19       00:00
[root@Client root]#
成功了!真的再也不須要輸入密碼了。
相關文章
相關標籤/搜索