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

