歡迎閱讀《每天一個Linux命令》系列!在本篇文章中,將介紹通過密鑰生成,使用公鑰連接管理服務器。
概念
SSH 密鑰是用于安全地訪問遠程服務器的一種方法。SSH 密鑰由一對密鑰組成:公鑰和私鑰。公鑰存儲在遠程服務器上,私鑰存儲在本地計算機上。
通過公鑰連接管理Linux服務器優缺點:
優點:
- 安全性: 公鑰身份驗證比密碼身份驗證更安全。公鑰是一個加密的密鑰對,私鑰保存在客戶端,而公鑰保存在服務器上。
- 無需密碼: 公鑰身份驗證消除了密碼管理的需求。用戶無需記住復雜的密碼,而且在服務器上也不需要存儲密碼。
- 方便性: 一旦設置了公鑰身份驗證,用戶就可以輕松地連接到服務器,而無需每次都輸入密碼。
- 多因素認證: 公鑰身份驗證可以與其他身份驗證方法結合使用,實現多因素認證。例如,可以使用密碼和公鑰的組合進行認證,提高安全性。
缺點:
-
密鑰管理: 公鑰身份驗證需要有效地管理密鑰對。如果私鑰丟失或泄露,可能會導致安全問題。
-
初次設置復雜性: 初次設置公鑰身份驗證可能會相對復雜,特別是對于不熟悉密鑰管理的用戶來說。然而,一旦設置完成,后續的連接將更為簡單。
-
無法處理丟失的私鑰: 如果用戶丟失了私鑰,他們將無法再次連接到服務器,除非管理員重新配置他們的公鑰。
-
不適用于所有場景: 公鑰身份驗證不適用于所有場景。在某些情況下,可能需要使用其他身份驗證方法,如密碼身份驗證或證書身份驗證。
總體而言,使用公鑰連接管理Linux服務器提供了更高的安全性和便捷性,但需要合理管理密鑰對以確保系統的整體安全。
生成密鑰
在本地計算機上生成 SSH 密鑰,可以使用 ssh-keygen
命令。
ssh-keygen
提示的意思(可以直接回車,留空默認):
此命令將提示您輸入以下信息:
- 文件名:用于存儲密鑰的文件名。默認為
id_rsa
。 - 密碼:用于保護私鑰的密碼。可以留空。
- 重復密碼:確認密碼。
生成密鑰后,將在本地計算機上創建兩個文件:
id_rsa
:私鑰文件。id_rsa.pub
:公鑰文件。
[root@chatgpt-test ~]# ll /root/.ssh
總用量 12
-rw-------. 1 root root 1675 12月 8 08:00 id_rsa
-rw-r--r--. 1 root root 399 12月 8 08:00 id_rsa.pub
-rw-r--r--. 1 root root 347 11月 21 05:19 known_hosts
將公鑰復制到遠程服務器
可以使用 cat
命令+遠程命令+重定向組合
cat ~/.ssh/id_rsa.pub | ssh 用戶名@遠程服務器地址 'cat >> ~/.ssh/authorized_keys'
此命令將將公鑰追加到遠程服務器上的 authorized_keys
文件中。
演示示例:
假設本地服務器用戶名為 root
,IP為192.168.31.223,遠程服務器的 IP 地址為 192.168.31.162
,則生成密鑰并將公鑰復制到遠程服務器的操作如下:
#在本地計算機上生成密鑰,執行命令后,根據提示,可以設置私鑰密碼,或者直接回車3次(默認),生成密鑰。
[root@chatgpt-test ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:
SHA256:8IlsI9RZn/sDvn10OB5mvm8d+yP/0rVb5cwNQbT1wlg root@chatgpt-test
The key's randomart image is:
+---[RSA 2048]----+
| . .E .|
| . o . . = o.|
| . + o . = .|
| . . + . . o |
| . = S o ...|
| o . . o B*=|
| . o* =%|
| o o=+=|
| . ..+BO|
+----[SHA256]-----+
將公鑰復制到遠程服務器
從192.168.31.223將公鑰復制到192.168.31.162
cat ~/.ssh/id_rsa.pub | ssh root@192.168.31.162 'cat >> ~/.ssh/authorized_keys'
注意事項
- 在生成密鑰時,建議使用強密碼來保護私鑰。
- 在復制公鑰時,請確保遠程服務器上的
authorized_keys
文件具有可寫權限。
其他方法
也可以使用 cp
命令來將公鑰復制粘貼到遠程服務器。
或者通過ssh-copy-id 用戶名@遠程服務器地址
,此命令將公鑰復制到遠程服務器上的 authorized_keys
文件中。
命令操作
使用 SSH 密鑰登錄遠程服務器的命令如下:
ssh [選項] 用戶名@遠程服務器地址
命令詳細解釋
ssh 命令的參數如下:
參數 | 說明 |
---|---|
選項 | 可選參數,用于指定 SSH 連接的屬性。 |
用戶名 | 遠程服務器上的用戶名。 |
遠程服務器地址 | 遠程服務器的 IP 地址或主機名。 |
命令選項
選項 | 說明 |
---|---|
-i | 指定私鑰文件的路徑。 |
-p | 指定遠程服務器的端口號。 |
-t | 啟用終端模式。 |
-v | 顯示 ssh 命令執行的詳細信息。 |
注意事項
- 在使用 SSH 密鑰登錄遠程服務器之前,需要在本地計算機上生成 SSH 密鑰并將公鑰復制到遠程服務器。
- 可以使用
ssh-keygen
命令生成 SSH 密鑰。 - 可以使用
cat
命令將公鑰復制到遠程服務器。
sshkey 命令的使用技巧
- 可以使用選項 -i 指定私鑰文件的路徑。如果不指定此選項,則 ssh 命令將使用默認的私鑰文件。
- 可以使用選項 -p 指定遠程服務器的端口號。如果不指定此選項,則 ssh 命令將使用默認的端口號 22。
- 可以使用選項 -t 啟用終端模式。如果不指定此選項,則 ssh 命令將啟用交互式模式。
- 可以使用選項 -v 顯示 ssh 命令執行的詳細信息。
以下是一些使用 sshkey 設置完成后演示命令的示例:
示例1:使用默認的私鑰文件登錄遠程服務器
ssh root@192.168.31.162
驗證:
[root@chatgpt-test ~]# ssh root@192.168.31.162
Last login: Thu Nov 30 08:24:49 2023 from 192.168.31.223
[root@localhost ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 02:11:32:2a:0f:96 brd ff:ff:ff:ff:ff:ffinet 192.168.31.162/24 brd 192.168.31.255 scope global noprefixroute eth0
示例2:使用指定的私鑰文件登錄遠程服務器
ssh -i ~/.ssh/id_rsa root@192.168.31.162
示例3:使用指定的端口號登錄遠程服務器
ssh -p 2222 root@192.168.31.162
通過SSH軟件登錄
soreceCRT無密碼登錄centos7
將生成的私鑰,通過命令sz ~/.ssh/id_rsa.pub
下載到本地,通過crt軟件讀寫私鑰文件進行登錄
即可無秘訪問192.168.31.162
-
設置公鑰優先級再前,密碼驗證再后
-
添加公鑰(點擊-屬性,選擇公鑰在本機的路徑)