伺服器間訪問不用密碼的設定
經常在伺服器程式(指令碼)裡面,或在命令列中,執行ssh,scp命令,會碰到要求密碼的情況,很不方便!
如果在兩台相互信任,其實步驟挺簡單,假設要從主機1上執行,ssh,scp操作。
主機1:host1 使用者1:user1主機2:host2 使用者2:user2
一:在主機1上執行下列操作:
1./home/user1/.ssh/ 目錄下,執行:ssh-keygen –t id_rsa
$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/user1/.ssh/id_rsa):/home/user1/.ssh/id_rsa already exists.Overwrite (y/n)? yEnter 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:12:a5:55:cc:1e:59:34:61:a2:41:ce:92:5a:a8:9d:ed user1@host1
2.一路預設斷行符號,產生id_rsa.pub檔案
3.cat id_rsa.pub >> authorized_keys
二:在主機2上執行下列操作:
1.拷貝主機1上的authorized_keys檔案到/home/user2/.ssh/目錄下。
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwvAv1SKPIkO2ucdmuz13RkVvSuZRKg/FGllbje/a2fDG2AYSdSKQSqe3GO/40YzA3BnVwBEY+cOKbTj9gpVWLf7bi1jZBDokeO3TWdQnzLfOObA4+F3EunwruyqekLTkAEpmoM400ndqmV5VGi1uvRl8gFgVes6pGkZAorzPll7vCCX4DC1R9XK8/VmtLm7Z4egR/UkPoiA9t7u/K3tdjn28DhPSEWnV1ggZZ30DxB14Mtw0+ZjP5joTISFXVBVDxbuUiibuS+2TmjVM3i20Ep1LTfzwFwYBbSGbReRIdowGsCaFK9zs6WIY84SRWR/mvIJOZQhbU1N/dQSnHobICQ== user1@host1
2.更改目錄存取權限:chmod 755 ~/.ssh/
三:最後在主機1上執行:
1. ssh user2@host2
2. scp user2@host2:/var/log/*.* .
就不需要輸入密碼了。
NOTE:
首先ssh-keygen -t rsa命令產生了一個密鑰和一個公開金鑰, 而且密鑰可以設定自己的密碼。可以把密鑰理解成一把鑰匙, 公開金鑰理解成這把鑰匙對應的鎖頭,把鎖頭(公開金鑰)放到想要控制的server上, 鎖住server, 只有擁有鑰匙(密鑰)的人, 才能開啟鎖頭, 進入server並控制。而對於擁有這把鑰匙的人, 必需得知道鑰匙本身的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設定密碼), 這樣就可以防止鑰匙被了配了(私密金鑰被人複製)。當然, 這種例子只是方便理解罷了,擁有root密碼的人當然是不會被鎖住的, 而且不一定只有一把鎖(公開金鑰), 但如果任何一把鎖, 被人用其對應的鑰匙(私密金鑰)開啟了, server就可以被那個人控制了。
所以說, 只要你曾經知道server的root密碼, 並將有root身份的公開金鑰放到上面, 就可以用這個公開金鑰對應的私密金鑰"開啟"server, 再以root的身分登入, 即使現在root密碼已經更改!
如果想控制n個機器, 那就需要n對鑰匙(密鑰和公開金鑰), ssh-keygen命令可以隨意更改鑰匙對的名字, 最好取容易識別的檔案名稱,比如:
# 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.10.1
......
這樣私密金鑰和公開金鑰的名字分別就是:
id_rsa_192.168.10.1 和 id_rsa_192.168.10.1.pub
然後將 id_rsa_192.168.0.1.pub 檔案的內容, 追加到伺服器的~/.ssh/authorized_keys檔案中,
最後, 在本地用ssh命令的 -i 參數指定本地密鑰, 並登入:
# ssh -i /root/.ssh/id_rsa_192.168.10.1 192.168.10.1
如果密鑰設定了密碼, 就用密鑰的密碼登入, 沒設密碼, 就直接登入進去了。scp也是一樣。