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

來源:互聯網
上載者:User
如何使得執行scp命令時不需要輸入使用者密碼
最近在編寫定時自動執行的shell腳步中遇到一個問題。在該腳步中,需要使用scp命令將本地的檔案複製到另一台機器中備份。但通常執行scp命令後都需要輸入使用者密碼,這樣在定時自動執行的shell腳步中就不適用了。
    本人的第一直覺就是建立無密碼使用者,在scp命令中使用該使用者就不需要輸入使用者密碼了。
    以下為了討論方便,我們將執行scp命令的機器稱為Client,scp命令操作的遠端機器稱為Server。
    首先,我通過以下命令將機器Server上root的密碼刪除,即使root變為無密碼使用者。
        [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]#
    成功了!真的不再需要輸入密碼了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.