使ssh不用輸入密碼(指令碼執行scp)

jolly10發表於2007-11-21
有些時候,我們在複製/移動檔案到另一臺機器時會用到scp,因為它比較安全。但如果每次都要輸入密碼,就比較煩了,尤其是在script裡。不過,ssh有另一種用金鑰對來驗證的方式。下面寫出我生成密匙對的過程,供大家參考。[@more@]

有些時候,我們在複製/移動檔案到另一臺機器時會用到scp,因為它比較安全。但如果每次都要輸入密碼,就比較煩了,尤其是在script裡。不過,ssh有另一種用金鑰對來驗證的方式。下面寫出我生成密匙對的過程,供大家參考。

第一步:生成密匙對,我用的是rsa的金鑰。使用命令 "ssh-keygen -t rsa"

程式碼:

[user1@rh user1]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 user1@rh.test.com
[user1@rh user1]$

生成的過程中提示輸入金鑰對儲存位置,直接回車,接受預設值就行了。接著會提示輸入一

個不同於你的password的密碼,直接回車,讓它空著。當然,也可以輸入一個。(我比較懶

,不想每次都要輸入密碼。) 這樣,金鑰對就生成完了。

其中公共金鑰儲存在 ~/.ssh/id_rsa.pub
私有金鑰儲存在 ~/.ssh/id_rsa

然後改一下 .ssh 目錄的許可權,使用命令 "chmod 755 ~/.ssh"
程式碼:

[user1@rh user1]$ chmod 755 ~/.ssh
[user1@rh user1]$


之後把這個金鑰對中的公共金鑰複製到你要訪問的機器上去,並儲存為

~/.ssh/authorized_keys.

程式碼:

[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys
user1@rh1's password:
id_rsa.pub 100% 228 3.2MB/s 00:00
[user1@rh user1]$


之這樣就大功告成了。之後你再用ssh scp sftp 之類的訪問那臺機器時,就不用輸入密碼

了,用在script上更是方便。

##############################################深入一點點:
從表面上簡單的理解一下登入的過程,首先 ssh-keygen -t rsa 命令生成了一個金鑰和一個公鑰, 而且金鑰可以設定自己的密碼,可以把金鑰理解成一把鑰匙, 公鑰理解成這把鑰匙對應的鎖頭,把鎖頭(公鑰)放到想要控制的server, 鎖住server, 只有擁有鑰匙(金鑰)的人, 才能開啟鎖頭, 進入server並控制,而對於擁有這把鑰匙的人, 必需得知道鑰匙本身的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設定密碼), 這樣就可以防止鑰匙被人配了(私鑰被人複製)
當然, 這種例子只是方便理解罷了,擁有root密碼的人當然是不會被鎖住的, 而且不一定只有一把鎖(公鑰), 但如果任何一把鎖, 被人用其對應的鑰匙(私鑰)開啟了, server就可以被那個人控制了所以說, 只要你曾經知道serverroot密碼, 並將有root身份的公鑰放到上面, 就可以用這個公鑰對應的私鑰"開啟" server, 再以root的身分登入, 即使現在root密碼已經更改!
如果想控制n個機器, 那就需要n對鑰匙(金鑰和公鑰), ssh-keygen 命令可以隨意更改鑰匙對的名字, 比如:
[root@wwy .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.102.12
......
這樣私鑰和公鑰的名字分別就是:
id_rsa_192.168.102.12
id_rsa_192.168.102.12.pub然後將 id_rsa_192.168.102.12.pub 檔案的內容, 追加到sever ~/.ssh/authorized_keys2 檔案中,
最後, 在本地用ssh命令的 -i 引數指定本地金鑰, 並登入:
#
ssh -i /root/.ssh/id_rsa_192.168.102.12 192.168.102.12
如果金鑰設定了密碼, 就用金鑰的密碼登入, 沒設密碼, 就直接登入進去了

scp
也是一樣的如:
scp
i /root/.ssh/id_rsa./xxx 192.168.102.158:/home/wwy/bak

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-983189/,如需轉載,請註明出處,否則將追究法律責任。

相關文章