您好,登录后才能下订单哦!
# 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_config
PubkeyAuthentication 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.log
Host 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。