ssh無密碼訪問

1、單向無密碼訪問 mysql

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

一、在須要無密碼登陸遠程服務器的機器上(本例爲服務器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是公鑰,是要上傳到遠程服務器的。 shell

二、上傳公鑰到須要無密碼登錄的遠程服務器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 ssh

三、測試 ide

上傳完公鑰文件到遠程後,立刻從服務器A登錄到服務器B,若是沒有輸入密碼登錄到了服務器B,表示成功,若是還要輸入密碼,則請檢查遠程服務器B上的.ssh目錄權限是否爲700,上傳的遠程服務器上的公鑰名是否改成了authorized_keys,權限是否爲644 工具

 

 

2、多臺服務器相互無密碼訪問 測試

多臺服務器相互無密碼訪問,與兩臺服務器單向無密碼訪問的原理是同樣的,只不過因爲是多臺服務器之間相互無密碼訪問,不能象兩臺服務器無密碼登陸那樣直接上傳,步驟以下: spa

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

二、在每臺服務器上生成密鑰對後,將公鑰複製到須要無密碼登錄的服務器上:
舉例如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

相關文章
相關標籤/搜索