Linux中設置SSH免密碼(密鑰)登錄的具體步驟
1. 基本原理
SSH 免密碼登錄通過公鑰認證實現(xiàn):
- 在客戶端生成一對密鑰(公鑰和私鑰)。
- 將公鑰添加到目標服務器的
~/.ssh/authorized_keys文件中。 - 客戶端使用私鑰登錄,無需輸入密碼。
2. 具體步驟
2.1 在客戶端生成 SSH 密鑰對
檢查是否已有密鑰
在客戶端(你的本地機器或跳板機)上,檢查是否已有 SSH 密鑰:
ls -l ~/.ssh/
如果存在 id_rsa(私鑰)和 id_rsa.pub(公鑰),可以跳到步驟 2.2。
生成密鑰對
使用 ssh-keygen 生成 RSA 或 ED25519 密鑰(推薦 ED25519,安全性更高):
ssh-keygen -t ed25519 -C "your_email@example.com"
或使用 RSA(舊系統(tǒng)可能不支持 ED25519):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 按 Enter 接受默認文件路徑(
~/.ssh/id_ed25519或~/.ssh/id_rsa)。 - 可設置密碼保護私鑰(為空則無密碼,推薦為空以實現(xiàn)完全免密)。
- 執(zhí)行后會生成:
~/.ssh/id_ed25519或~/.ssh/id_rsa(私鑰)~/.ssh/id_ed25519.pub或~/.ssh/id_rsa.pub(公鑰)
2.2 將公鑰復制到目標服務器
將客戶端的公鑰添加到目標服務器的 ~/.ssh/authorized_keys 文件中。
使用 ssh-copy-id(推薦,簡單)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
- 替換
user為目標服務器的用戶名,remote_host為服務器 IP 或域名。 - 輸入目標服務器密碼,公鑰會自動添加到
~/.ssh/authorized_keys。
手動復制(如果 ssh-copy-id 不可用)
- 在客戶端查看公鑰內容:
cat ~/.ssh/id_ed25519.pub
- 復制輸出內容(類似
ssh-ed25519 AAAAC3... your_email@example.com)。 - 登錄目標服務器,編輯
authorized_keys:
ssh user@remote_host mkdir -p ~/.ssh echo "your_public_key" >> ~/.ssh/authorized_keys
- 確保權限正確:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
2.3 測試免密碼登錄
在客戶端嘗試登錄:
ssh user@remote_host
如果配置正確,將無需輸入密碼直接登錄。
2.4 (可選)配置 SSH 客戶端
為方便管理,可以在客戶端的 ~/.ssh/config 文件中添加配置:
# 編輯配置文件 nano ~/.ssh/config
添加以下內容:
Host alias_name
HostName remote_host
User user
IdentityFile ~/.ssh/id_ed25519
alias_name:自定義別名,如myserver。- 保存后,使用
ssh alias_name即可登錄。
3. 防火墻與 SSH 配置
確保目標服務器的防火墻允許 SSH 連接(默認端口 22):
使用 firewalld:
sudo firewall-cmd --zone=public --add-service=ssh --permanent sudo firewall-cmd --reload
使用 iptables:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables-save > /etc/sysconfig/iptables
使用 ufw(Ubuntu):
sudo ufw allow ssh
4. 常見問題排查
無法免密登錄
檢查服務器端 SSH 配置(/etc/ssh/sshd_config):
sudo nano /etc/ssh/sshd_config
確保以下配置啟用:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
重啟 SSH 服務:
sudo systemctl restart sshd
檢查 ~/.ssh/authorized_keys 文件權限(必須為 600):
ls -l ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
檢查客戶端私鑰權限:
chmod 600 ~/.ssh/id_ed25519
SELinux 限制(CentOS/RHEL)
如果 SELinux 啟用,可能阻止 SSH 登錄:
sudo setsebool -P ssh_keysign on sudo restorecon -R -v ~/.ssh
連接被拒絕
- 確認服務器 SSH 服務運行:
sudo systemctl status sshd
- 檢查防火墻是否開放 22 端口:
sudo firewall-cmd --list-ports
- 測試端口連通性:
nc -zv remote_host 22
公鑰格式錯誤
確保公鑰是一行完整內容,復制時不要引入換行符。
5. AI 開發(fā)相關場景
在 AI 開發(fā)中,免密碼登錄常用于:
- 遠程訪問 GPU 服務器:配置 Jupyter Notebook 或 TensorFlow Serving 的遠程訪問。
- 自動化腳本:如批量部署模型訓練任務,需在多臺機器間免密傳輸文件(
scp或rsync)。 - Docker 集群:在多節(jié)點集群中配置 SSH 免密登錄以便管理。
示例:在客戶端配置 scp 免密傳輸:
scp dataset.tar.gz user@remote_host:/path/to/destination
6. 安全注意事項
- 保護私鑰:不要泄露
~/.ssh/id_rsa或~/.ssh/id_ed25519,確保文件權限為 600。
限制公鑰訪問:在 authorized_keys 中可添加限制,如:
from="192.168.1.100" ssh-ed25519 AAAAC3... your_email@example.com
僅允許特定 IP 使用該公鑰登錄。
禁用密碼登錄:為提高安全性,可在 /etc/ssh/sshd_config 中設置:
PasswordAuthentication no
然后重啟 sshd:
sudo systemctl restart sshd
以上就是Linux中設置SSH免密碼(密鑰)登錄的具體步驟的詳細內容,更多關于Linux SSH免密碼登錄的資料請關注腳本之家其它相關文章!
相關文章
CentOS8查看IP報錯:bash:ifconfig:command not found的原因及解
在使用 CentOS 8 系統(tǒng)時,有時會遇到使用 ??ifconfig?? 命令查看網(wǎng)絡接口信息時出現(xiàn) ??bash: ifconfig: command not found?? 的錯誤,所以本文給大家介紹了報錯的原因和解決方案,需要的朋友可以參考下2025-03-03
VMware Workstation安裝(Linux內核)銀河麒麟圖文教程
這篇文章主要為大家詳細介紹了VMware Workstation安裝(Linux內核)銀河麒麟,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10
基于SecureCRT向遠程Linux主機上傳下載文件步驟圖解
這篇文章主要介紹了基于SecureCRT向遠程Linux主機上傳下載文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
Centos7 iptables開放端口實現(xiàn)方式
排查MySQL遠程連接失?。合却_認安全組端口開放,再檢查FirewallD是否運行,若未啟用則查看iptables規(guī)則,發(fā)現(xiàn)3306被DROP后修改為ACCEPT,測試連接成功,總結經(jīng)驗供參考2025-08-08

