使用SSH訪問遠程命令行
描述Secure Shell
SSH(Secure Shell) 是一種網絡協議,用于在不安全的網絡上安全地進行系統管理和數據傳輸。它最初由 Tatu Yl?nen 于1995年設計,并成為保護網絡服務免受攻擊的標準。SSH提供了多種功能,包括遠程登錄、命令執行、文件傳輸和端口轉發。
Secure Shell示例
使用root用戶遠程登錄;
使用exit命令可以注銷遠程系統。
[root@hcss-ecs-huawei ~]# exit
logout
Connection to 1.94.13.218 closed.
[root@servera ~]#
?使用普通用戶遠程登錄;
識別遠程用戶
w命令可以顯示當前登錄系統的用戶列表。它還顯示遠程系統位置和用戶運行的命令。
?
嚴格的主機密鑰檢查
StrictHostKeyChecking參數在用戶特定的~/.ssh/config文件或系統范圍內的/etc/ssh/sshd_config文件中設置。或者通過指定ssh命令的-o StrictHostKeyChecking=選項來設置。
如果 StrictHostKeyChecking參數設置為yes,則ssh命令會在公鑰不匹配的情況下始終中斷SSH連接。
如果 StrictHostKeyChecking參數設置為no,則ssh命令將啟用連接并將目標主機的密鑰添加到~/.ssh/known_hosts文件。
SSH已知主機密鑰管理
有關已知遠程系統及其密鑰的信息存儲在以下任一位置:
- 系統范圍的/etc/ssh/ssh_known_hosts文件;
- 每個用戶的主目錄中的~/.ssh/known_hosts文件。
[root@servera ~]# cat ~/.ssh/known_hosts
1.94.13.218 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIVQneajIfzXxzxwfgHPFu+rixWH7ll/Oxl3N7UMyuan
1.94.13.218 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLyCtDY9KkbQ/t5jwp63LyYHY9CptamUFV2pTlQQh2Geu7
HrMMQ7aDBv5mLCaHazxu15Ka3rBuykP77qy7po2ko=
每個已知主機密鑰條目包含一行,其中有三個字段:
- 第一個字段是共享該公鑰的主機名和IP地址的列表;
- 第二個字段是公鑰的加密算法;
- 最后一個字段是公鑰本身。
主機密鑰問題故障排除
如果遠程系統的IP地址或公鑰發生更改,并且您嘗試再次通過SSH連接該系統,則SSH客戶端會檢測到~/.ssh/known_hosts文件中用于該系統的密鑰條目不再有效。系統會顯示一條警告消息,指出遠程主機表示已更改,您必須修改密鑰條目。
解決辦法:
如果是從Windows終端使用xshell或其他遠程工具連接Linux服務器,請按照以下路徑找到.ssh文件夾C:\Users\\.ssh,將known_hosts中的主機舊條目刪除。
如果是Linux客戶端登錄Linux服務器出現以上類似的情況,請使用ssh-keygen -R remotesystemname -f ~/.ssh/known_hosts進行操作。
配置基于SSH密鑰的身份驗證
SSH密鑰生成
使用ssh-keygen命令創建一個密鑰對。默認情況下,ssh-keygen命令將您的私鑰和公鑰保存在~/.ssh/id_rsa和~/.ssh/id_rsa.pub文件中。
使用ssh-keygen -t rsa -b 2048 命令在 Linux 中用于生成一個 2048 位的 RSA 密鑰對。
?
ssh-keygen:這是一個用于創建新的認證密鑰對的命令行工具。它是 OpenSSH 套件的一部分。
-t rsa:指定要生成的密鑰類型為 RSA(Rivest-Shamir-Adleman)。RSA 是一種常見的公鑰加密算法,廣泛用于 SSH 和其他安全協議。
-b 2048:指定密鑰長度為 2048 位。密鑰長度越長,安全性越高,但計算復雜度也增加。2048 位是目前被認為安全且性能良好的常用長度。
可以選擇向ssh-keygen提供密語,用于加密私鑰。一旦設置了密語,則每次使用私鑰時都必須輸入密語。
?
ssh-keygen命令-f選項指定用于保存密鑰的文件。
共享公鑰
ssh-copy-id命令可將SSH密鑰對的公鑰復制到遠程系統上。可以使用ssh-copy-id命令指定特定的公鑰,或使用默認的~/.ssh/id_rsa.pub文件。
?
如果配置了密語來保護私鑰,SSH將在第一次使用時請求密語。但是,如果密鑰身份驗證成功,則不會要求您輸入帳戶的密碼。
SSH客戶端配置
SSH 客戶端配置文件位于 ~/.ssh/config。如果該文件不存在,可以創建它。
vim ~/.ssh/config
?在配置文件中,可以為不同的遠程服務器添加不同的配置項。以下是一個示例配置:
Host myserverHostName 192.168.72.10User rootPort 22IdentityFile ~/.ssh/id_rsaStrictHostKeyChecking yesUserKnownHostsFile ~/.ssh/known_hosts
Host:給遠程服務器起一個別名(例如 myserver),以后可以用這個別名來連接服務器。
HostName:遠程服務器的 IP 地址或域名。
User:用于連接的用戶名。
Port:SSH 服務監聽的端口,默認為 22。
IdentityFile:私鑰文件路徑。
StrictHostKeyChecking:啟用嚴格的主機密鑰檢查。
UserKnownHostsFile:指定已知主機文件的路徑。
自定義OpenSSH服務配置
禁止超級用戶進行登錄
在生產環境中,一般不會以root用戶身份進行遠程登錄,這樣會有很大的安全風險。
OpenSSH服務器使用/etc/ssh/sshd_config文件中的PermitRootLogin配置設置,以允許或禁止用戶以root身份登錄系統。
PermitRootLogin yes
當PermitRootLogin參數設置為yes時(默認設置),用戶被允許以root用戶身份登錄系統。要防止這種情況,可將該值設置為no。
禁止將基于密碼的身份驗證用于SSH
為了提高 SSH 連接的安全性,可以禁用基于密碼的身份驗證,強制使用基于公鑰的身份驗證。這可以防止攻擊者通過暴力破解密碼來訪問你的服務器。
打開 /etc/ssh/sshd_config 文件進行編輯:
vim /etc/ssh/sshd_config
找到以下配置項,并確保它們的值如下:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
確保 PubkeyAuthentication 是啟用的:
PubkeyAuthentication yes
保存并關閉文件后,重啟 SSH 服務使配置生效:
systemctl restart sshd