假設有 A、 B 兩台 Linux 服務器,我們希望能夠從其中一台服務器通過 SSH 免密碼登錄到另一台服務器。
兩台服務器的信息如下:
主機名 | IP地址 | 免密碼登錄用戶名 |
server1 | 192.168.12.11 | guest1 |
server2 | 192.168.12.12 | guest2 |
環境設置(root權限)
1.關閉防火牆和SELinux
Redhat使用了SELinux來增強安全,關閉的辦法為:
a. 永久有效
修改 /etc/selinux/config 文件中的 SELINUX=enforcing 修改為 SELINUX=disabled ,然后重啟。
b. 臨時生效
setenforce 0
關閉防火牆的方法為:
a. 永久有效
開啟:chkconfig iptables on
關閉:chkconfig iptables off
b. 臨時生效
開啟:service iptables start
關閉:service iptables stop
需要對兩台服務器分別進行設置,關閉防火牆和 SELinux 。
2.設置主機名
編輯 /etc/sysconfig/network 文件,使用命令: vim /etc/sysconfig/network ,設置格式:HOSTNAME=[主機名] 。
將A服務器的主機名設置為 server1 。
將B服務器的主機名設置為 server2 。
3.配置hosts
編輯 /etc/hosts 文件,使用命令:vim /etc/hosts ,在兩台服務器的 hosts 文件中分別增加如下配置:
1
2
|
192.168.12.11 server1
192.168.12.12 server2
|
4.配置sshd
編輯兩台服務器的 /etc/ssh/sshd_config 文件,使用命令:vim /etc/ssh/sshd_config 。
去掉以下3行的 “#” 注釋:
1
2
3
|
RSAAuthentication
yes
PubkeyAuthentication
yes
AuthorizedKeysFile .
ssh
/authorized_keys
|
重啟 sshd 服務,使用命令:/sbin/service sshd restart 。
秘鑰設置
1.創建免密碼登錄賬戶
使用命令:
1
2
|
useradd
guest1
//
創建新用戶
passwd
guest1
//
設置新用戶登錄密碼
|
同樣地,在 server2 中創建一個 guest2 賬戶 。
2.生成秘鑰
從 root 用戶切換到要免密碼登錄的賬戶,使用命令:su guest1 。
執行命令:ssh-keygen -t rsa
無需指定口令密碼,直接回車,命令執行完畢后會在 guest1 用戶的家目錄中(/home/guest1/.ssh)生成兩個文件:
1
2
|
id_rsa: 私鑰
id_rsa.pub:公鑰
|
按照同樣的步驟,在 server2 中為 guest2 賬戶生成好秘鑰文件。
3.將公鑰導入到認證文件
使用命令:
1
2
|
cat
/home/guest1/
.
ssh
/id_rsa
.pub >>
/home/guest1/
.
ssh
/authorized_keys
ssh
guest2@server2
cat
/home/guest2/
.
ssh
/id_rsa
.pub >> authorized_keys
|
使用命令 cat authorized_keys 查看 authorized_keys 文件內容如下:
4.設置文件訪問權限
使用命令:
1
2
|
chmod
700
/home/guest1/
.
ssh
chmod
600
/home/guest1/
.
ssh
/authorized_keys
|
執行完以上設置之后 server1 就能夠免密碼登錄本機了,使用命令:ssh guest1@server1 。
注意:當 known_hosts 文件中缺少主機名稱信息時會提示如下信息,輸入 yes 即可將主機名稱寫入 known_hosts 文件並登陸成功。
至此,主機 server1 的 SSH 免密碼登錄就算配置完成了,接下來配置 server2 。
5.將認證文件復制到其他主機
執行以下命令將生成的 authorized_keys、known_hosts兩個文件從 server1 復制到 server2 。
1
2
3
|
# scp [要傳輸的本地文件] [遠程主機用戶名]@遠程主機ip或主機名:[文件要傳輸到的目標位置]
scp
/home/guest1/
.
ssh
/authorized_keys
guest2@server2:
/home/guest2/
.
ssh
/authorized_keys
scp
/home/guest1/
.
ssh
/known_hosts
guest2@server2:
/home/guest2/
.
ssh
/known_hosts
|
待復制完成以后,先使用以下命令設置文件訪問權限。
1
2
|
chmod
700
/home/guest2/
.
ssh
chmod
600
/home/guest2/
.
ssh
/authorized_keys
|
然后,執行 ssh guest1@server1 命令就能夠使用server2的guest2賬戶免密碼登錄server1的guest1賬戶了。
至此,兩台服務器的SSH 免密碼登錄就全部設置完成,如果出錯,請仔細檢查以上各個步驟。