兩台或者多台linux服務器ssh相互無密碼訪問


一、單向無密碼訪問

單向無密碼訪問遠程服務器操作比較簡單,比如服務器A需要無密碼訪問服務器B(A–>B),那么只需要在服務器A生成密鑰對,將生成的公鑰上傳到服務器B的相關用戶目錄下的.ssh目錄中(沒有的話手動創建,注意,它的目錄權限是700),並將公鑰文件名稱改為authorized_keys(注意,這個文件的權限應該是644),請注意.ssh目錄及authorized_keys文件的權限,權限不符,會使配置無效。具體操作如下:

1、在需要無密碼登錄遠程服務器的機器上(本例為服務器A)生成密碼對:
在生成的過程中有幾個選項讓你輸入密鑰對的保存目錄及輸入私鑰,直接enter就行了。
[root@mysqlcluster ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory ‘/root/.ssh’.
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:
0e:4c:ec:e3:04:98:b0:71:00:91:75:57:ee:56:a1:82 root@mysqlcluster
執行上面一步,會在~/.ssh目錄下生成兩個文件id_rsa和id_rsa.pub, 其中id_rsa是私鑰,保存在本機;id_rsa.pub是公鑰,是要上傳到遠程服務器的。

2、上傳公鑰到需要無密碼登陸的遠程服務器B上並改名為authorized_keys:
遠程服務器B上如果沒有.ssh目錄的話,先手動創建:
[root@www1bak ~]# mkdir .ssh
[root@www1bak ~]# chmod 755 .ssh

然后從服務器A上傳公鑰文件到遠程服務器B:

[root@mysqlcluster ~]# scp .ssh/id_rsa.pub root@192.168.15.234:/root/.ssh/authorized_keys
The authenticity of host ’192.168.15.234 (192.168.15.234)’ can’t be established.
RSA key fingerprint is c9:ef:0c:1b:ac:6c:ef:84:a4:a7:e5:d1:20:58:c8:73.
Are you sure you want to continue connecting (yes/no)? yes                              
Warning: Permanently added ’192.168.15.234′ (RSA) to the list of known hosts.    //這一步會將遠程服務器B加入到本機(服務器A)的known_hosts列表中
root@192.168.15.234′s password:
id_rsa.pub                                                                                        100%  399     0.4KB/s   00:00

3、測試

上傳完公鑰文件到遠程后,馬上從服務器A登陸到服務器B,如果沒有輸入密碼登陸到了服務器B,表示成功,如果還要輸入密碼,則請檢查遠程服務器B上的.ssh目錄權限是否為700,上傳的遠程服務器上的公鑰名是否改為了authorized_keys,權限是否為644

 

 

二、多台服務器相互無密碼訪問

多台服務器相互無密碼訪問,與兩台服務器單向無密碼訪問的原理是一樣的,只不過由於是多台服務器之間相互無密碼訪問,不能象兩台服務器無密碼登錄那樣直接上傳,步驟如下:

1、在每台服務器上都執行ssh-keygen -t rsa生成密鑰對:
#ssh-keygen -t rsa

2、在每台服務器上生成密鑰對后,將公鑰復制到需要無密碼登陸的服務器上:
舉例如192.168.15.240,192.168.15.241,192.168.15.242這三台服務器需要做相互免密碼登陸,在每台服務器生成密鑰對后,在每台服務器上執行ssh-copy-id命令(具體說明及用法見最后附錄),將公鑰復制到其它兩台服務器上(此處以192.168.15.240為例,用戶為root,其它兩台步驟相同)
#ssh-copy-id -i  ~/.ssh/id_rsa.pub root@192.168.15.241
#ssh-copy-id -i  ~/.ssh/id_rsa.pub root@192.168.15.242
以上命令,可以自動將公鑰添加到名為authorized_keys的文件中,在每台服務器都執行完以上步驟后就可以實現多台服務器相互無密碼登陸了
附ssh-copy-id介紹及用法:

Linux系統里缺省都包含一個名為ssh-copy-id的工具:

# type ssh-copy-id
ssh-copy-id is /usr/bin/ssh-copy-id

你用cat或者more命令看一下就知道ssh-copy-id本身其實就是一個shell腳本,用法很簡單:

# ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

再也不用記如何拼寫authorized_keys這個文件名了,是不是很爽,可惜別高興太早了,ssh-copy-id有一個很要命的問題,那就是缺省它僅僅支持SSH運行在22端口的情況,不過實際上出於安全的需要,我們往往都會更改服務器的SSH端口,比如說改成10022端口,這時候你運行ssh-copy-id就會報錯了,直接修改ssh-copy-id腳本當然可以修正這個問題,但是那樣顯得太生硬了,實際上還有更好的辦法:

# vi ~/.ssh/config

加上內容:

Host server
Hostname ip
Port 10022

你也可以單獨只加入Port一行配置,那樣就是一個全局配置,保存后再運行ssh-copy-id命令就不會報錯了。

補充:如果端口不是22,不修改config文件,按如下方式也可以:

ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 10022 user@server


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM