# Linux系統中如何設置SSH免密登錄
## 目錄
1. [SSH免密登錄概述](#1-ssh免密登錄概述)
2. [SSH密鑰對工作原理](#2-ssh密鑰對工作原理)
3. [環境準備](#3-環境準備)
4. [生成SSH密鑰對](#4-生成ssh密鑰對)
5. [配置公鑰到目標服務器](#5-配置公鑰到目標服務器)
6. [權限設置要點](#6-權限設置要點)
7. [測試免密登錄](#7-測試免密登錄)
8. [常見問題排查](#8-常見問題排查)
9. [安全注意事項](#9-安全注意事項)
10. [高級配置技巧](#10-高級配置技巧)
11. [總結](#11-總結)
---
## 1. SSH免密登錄概述
SSH(Secure Shell)是Linux系統中最常用的遠程管理協議,傳統密碼登錄方式存在暴力破解風險且操作繁瑣。免密登錄通過非對稱加密技術實現安全認證,具有以下優勢:
- 安全性:密鑰認證比密碼更難以暴力破解
- 便捷性:無需反復輸入密碼,適合自動化腳本
- 可靠性:避免因密碼過期導致的連接中斷
典型應用場景:
- 服務器集群管理
- 自動化部署(CI/CD)
- 定時任務執行
- 文件同步(如rsync)
## 2. SSH密鑰對工作原理
SSH免密登錄基于非對稱加密體系:
客戶端 服務端 |——– 公鑰傳輸 ———–>| | | 將公鑰存入 | | ~/.ssh/authorized_keys |<—– 加密挑戰消息 ———–| | 用私鑰解密并應答 | |——– 解密結果 ————>| | | 驗證通過后建立連接
密鑰類型說明:
- RSA:兼容性最好(推薦2048位以上)
- ECDSA:安全性更高但舊系統可能不支持
- Ed25519:最先進的算法(OpenSSH 6.5+)
## 3. 環境準備
### 3.1 確認SSH服務狀態
```bash
# 檢查客戶端SSH
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
# 檢查服務端SSH服務
$ sudo systemctl status sshd
$ ping target-server
$ telnet target-server 22 # 檢查端口開放
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
參數說明:
- -t:指定密鑰類型
- -b:密鑰位數(RSA建議至少2048)
- -C:注釋信息(通常用郵箱標識)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
id_rsa:私鑰文件(權限必須為600)id_rsa.pub:公鑰文件(可自由分發)known_hosts:已認證主機記錄authorized_keys:允許登錄的公鑰集合$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-host
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E... user@host
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ echo "公鑰內容" >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
當需要為不同服務器使用不同密鑰時:
# ~/.ssh/config 示例
Host server1
HostName 192.168.1.100
User admin
IdentityFile ~/.ssh/server1_key
Host github.com
User git
IdentityFile ~/.ssh/github_key
正確的文件權限至關重要:
# 客戶端權限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
# 服務端權限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
權限錯誤會導致的典型報錯:
Permissions 0644 for '/home/user/.ssh/id_rsa' are too open.
$ ssh user@remote-host
$ ssh -vvv user@remote-host
成功連接后應看到:
Authenticated to remote-host ([IP]:22) using "publickey".
setenforce 0)/etc/ssh/sshd_configPubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
$ sudo systemctl restart sshd
$ sudo ufw allow 22 # 防火墻設置
$ ssh-keygen -R hostname # 清除舊指紋
$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
PermitRootLogin no
AllowUsers admin deploy
Port 2222
/var/log/auth.logHost jumpbox
HostName jump.example.com
User admin
IdentityFile ~/.ssh/jump_key
Host internal-server
HostName 10.0.0.1
User deploy
ProxyJump jumpbox
在authorized_keys中添加限制:
command="/bin/journalctl -u app" ssh-rsa AAAAB3Nza...
結合Google Authenticator:
AuthenticationMethods publickey,keyboard-interactive
SSH免密登錄是Linux系統管理的必備技能,正確配置后可以: - 提高工作效率 - 增強系統安全性 - 實現自動化運維
建議實踐路線: 1. 在測試環境練習完整流程 2. 為主力服務器配置免密登錄 3. 學習Ansible等自動化工具時應用此技術
附錄:常用命令速查表
| 命令 | 功能 |
|---|---|
ssh-keygen -l -f keyfile |
查看密鑰指紋 |
ssh-add -L |
列出已加載密鑰 |
ssh -T git@github.com |
測試GitHub連接 |
scp -i keyfile local user@remote:path |
安全文件傳輸 |
”`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。