Linux環(huán)境下,經(jīng)常通過SSH從一臺服務(wù)器登錄到另一臺服務(wù)器,并且登錄身份不是root賬號,每次都要輸入密碼挺麻煩的,所以今天實(shí)戰(zhàn)一下如何配置非root賬號的免密碼登錄;
如果想要看到圖片配置,可以查看我其他的文章
實(shí)戰(zhàn)環(huán)境
本次實(shí)戰(zhàn)環(huán)境是三臺CentOS 7.5機(jī)器,它們的相關(guān)信息如下所示:
| IP 地址 | 主機(jī)名 |
|---|---|
| 192.168.50.160 | node0 |
| 192.168.50.161 | node1 |
| 192.168.50.162 | node2 |
準(zhǔn)備工作
- 1.確認(rèn)ssh服務(wù)已經(jīng)安裝并打開;
2.打開文件/etc/ssh/sshd_config,確保以下配置已經(jīng)添加(如果被"#“注釋了就把”#"刪除):
AuthorizedKeysFile .ssh/authorized_keys
PubkeyAuthentication yes
- 3.三臺機(jī)器的/etc/hostname文件中的內(nèi)容分別是node0、node1、node2;
4.三臺機(jī)器的/etc/hosts文件尾部都添加以下三行內(nèi)容(請按照自己機(jī)器的ip地址來填寫):
192.168.50.160 node0
192.168.50.161 node1
192.168.50.162 node2
- 5.三臺機(jī)器上都有非root賬號,為了方便操作,這里為三臺機(jī)器都創(chuàng)建了名為hadoop的賬號和群組,創(chuàng)建命令
groupadd hadoop && useradd -d /home/hadoop -g hadoop -m hadoop
創(chuàng)建完賬號后記得用命令passwd初始化hadoop賬號的密碼;
- 在node0機(jī)器上輸入ssh hadoop@node1,嘗試ssh登錄node1,此時(shí)由于未配置免密碼登錄,所以控制臺要求輸入node1的密碼,如下:
[hadoop@node0 ~]$ ssh hadoop@node1
The authenticity of host 'node1 (192.168.50.161)' can't be established.
ECDSA key fingerprint is SHA256:DJ8ZdacngzPjAszOZTpx1WudYX+u0aAUld7ZYSK9/4g.
ECDSA key fingerprint is MD5:86:78:2f:c7:c2:97:7f:79:dd:b7:d0:26:fd:bf:a6:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node1,192.168.50.161' (ECDSA) to the list of known hosts.
hadoop@node1's password:
Last login: Thu Feb 7 18:10:40 2019 from 192.168.50.1
[hadoop@node1 ~]$
準(zhǔn)備工作已經(jīng)完成,接下來開始實(shí)戰(zhàn)免密碼登錄配置;
生成秘鑰(三臺機(jī)器都要執(zhí)行)
- 1.以hadoop賬號登錄;
2.輸入ssh-keygen -t rsa,然后一路回車,順利生成秘鑰文件,如下:
[hadoop@node0 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ct6HIbAfypJpr/VLzxOeWX4WngQPUaSrJTguPN23Eh4 hadoop@node0
The key's randomart image is:
+---[RSA 2048]----+
| oo |
| .. |
| . .. |
| o . o. |
| . +o..So+ |
| +.+o=oE+. + |
|+.o=o+*oX.o o |
|..o = oO...= |
| ... o.oo.o |
+----[SHA256]-----+
[hadoop@node0 ~]$
進(jìn)入目錄~/.ssh/可見如下內(nèi)容:
[hadoop@node0 ~]$ cd ~/.ssh/
[hadoop@node0 .ssh]$ ls
id_rsa id_rsa.pub known_hosts
配置秘鑰授權(quán)文件
- 1.以hadoop賬號登錄node0機(jī)器;
2.生成一個(gè)空白文件:
touch ~/.ssh/authorized_keys
將node0自己的公鑰放入文件authorized_keys中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
以hadoop賬號登錄node1機(jī)器,執(zhí)行以下命令,即可將node1的公鑰傳輸?shù)?strong>node0機(jī)器,文件名為node1.id_rsa.pub:
scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node1.id_rsa.pub
期間會要求輸入node0的hadoop賬號的密碼,輸入后傳輸完成,在node0的/home/hadoop/.ssh目錄下,多了個(gè)名為node1.id_rsa.pub的文件;
- 在node0機(jī)器執(zhí)行以下命令,即可將node1.id_rsa.pub的內(nèi)容寫入authorized_keys文件:
cat ~/.ssh/node1.id_rsa.pub >> ~/.ssh/authorized_keys
此時(shí)authorized_keys文件中已經(jīng)有了node0和node1的公鑰;
- 以hadoop賬號登錄node2機(jī)器,執(zhí)行以下命令,即可將node2的公鑰傳輸?shù)?strong>node0機(jī)器,文件名為node2.id_rsa.pub:
scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node2.id_rsa.pub
期間會要求輸入node0的hadoop賬號的密碼,輸入后傳輸完成,在node0的/home/hadoop/.ssh目錄下,多了個(gè)名為node2.id_rsa.pub的文件;
- 在node0機(jī)器執(zhí)行以下命令,即可將node2.id_rsa.pub的內(nèi)容寫入authorized_keys文件:
cat ~/.ssh/node2.id_rsa.pub >> ~/.ssh/authorized_keys
此時(shí)authorized_keys文件中已經(jīng)有了node0、node1、node2的公鑰;
同步秘鑰授權(quán)文件
以hadoop賬號登錄node0機(jī)器,執(zhí)行以下命令將秘鑰授權(quán)文件同步到node1機(jī)器:
scp ~/.ssh/authorized_keys hadoop@node1:~/.ssh/
以hadoop賬號登錄node0機(jī)器,執(zhí)行以下命令將秘鑰授權(quán)文件同步到node2機(jī)器:
scp ~/.ssh/authorized_keys hadoop@node2:~/.ssh/
至此,秘鑰授權(quán)文件已經(jīng)同步到所有機(jī)器,如果前面的所有操作用的是root賬號,此時(shí)已經(jīng)可以免密碼登錄成功了,但是今天我們用的不是root賬號,此時(shí)在node0輸入命令ssh hadoop@node1,卻發(fā)現(xiàn)依然要求輸入node1的hadoop賬號的密碼,這是因?yàn)槲募臀募A權(quán)限的問題導(dǎo)致的,接下來解決權(quán)限問題;
調(diào)整文件夾和文件的權(quán)限(三臺機(jī)器都要執(zhí)行)
其他的方法配置ssh免秘鑰很容易因權(quán)限問題失敗
- 1.先調(diào)整文件夾~/.ssh的權(quán)限:
chmod 700 ~/.ssh
- 2.再調(diào)整文件~/.ssh/authorized_keys的權(quán)限:
chmod 600 ~/.ssh/authorized_keys
- 3.至此,非root賬號的SSH免密碼登錄配置已經(jīng)完成,在node0輸入命令ssh hadoop@node1試試,如下,順利登錄,不需要輸入密碼:
[hadoop@node0 ~]$ ssh hadoop@node1
Last login: Fri Feb 8 00:36:57 2019 from 192.168.119.1
[hadoop@node1 ~]$
再去node1、node2機(jī)器上試試SSH登錄其他機(jī)器,發(fā)現(xiàn)也能免密碼登錄;