您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何进行Linux系统SSH服务中的SSH Key密钥认证实战
## 一、SSH密钥认证概述
### 1.1 什么是SSH密钥认证
SSH(Secure Shell)密钥认证是一种基于非对称加密的身份验证方式,相比传统的密码认证具有更高的安全性。它通过生成一对数学关联的公钥和私钥来实现身份验证:
- **公钥**:存储在远程服务器上(通常位于`~/.ssh/authorized_keys`)
- **私钥**:保留在客户端本地,需要严格保密
### 1.2 为什么使用密钥认证
- **更高的安全性**:抵御暴力破解和中间人攻击
- **免密码登录**:提高自动化操作效率
- **审计追踪**:可针对不同密钥设置不同权限
- **符合安全规范**:多数企业安全标准要求使用密钥认证
## 二、环境准备
### 2.1 实验环境说明
- 客户端:Ubuntu 22.04 LTS(IP: 192.168.1.100)
- 服务端:CentOS 8(IP: 192.168.1.200)
- 网络:双方网络互通,防火墙已放行22端口
### 2.2 基础检查
```bash
# 检查SSH服务状态
systemctl status sshd
# 确认SSH配置文件路径
ls -l /etc/ssh/sshd_config
ssh-keygen -t ed25519 -C "work@server1" -f ~/.ssh/work_server1
参数说明:
- -t
:指定密钥类型(推荐ed25519或rsa)
- -C
:添加注释信息
- -f
:指定密钥文件路径
算法类型 | 安全性 | 密钥长度 | 兼容性 |
---|---|---|---|
RSA | 高 | ≥4096位 | 最好 |
ED25519 | 最高 | 256位 | 较新系统支持 |
ECDSA | 高 | 384位 | 一般 |
# 设置密钥文件权限
chmod 600 ~/.ssh/work_server1*
# 使用ssh-agent管理密钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/work_server1
# 方法1:使用ssh-copy-id
ssh-copy-id -i ~/.ssh/work_server1.pub user@192.168.1.200
# 方法2:手动追加公钥
cat ~/.ssh/work_server1.pub | ssh user@192.168.1.200 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
编辑/etc/ssh/sshd_config
:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 禁用密码认证
PermitRootLogin prohibit-password
# 设置正确的目录权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 确认文件所有者
chown -R user:user ~/.ssh
ssh -i ~/.ssh/work_server1 user@192.168.1.200
权限问题:
# 查看详细错误信息
ssh -v -i ~/.ssh/work_server1 user@192.168.1.200
SELinux阻止访问: “`bash
getenforce
# 临时解决方案 restorecon -Rv ~/.ssh
3. **配置文件未生效**:
```bash
# 重新加载SSH配置
systemctl reload sshd
配置~/.ssh/config
文件示例:
Host server1
HostName 192.168.1.200
User user1
IdentityFile ~/.ssh/work_server1
Port 2222
Host github.com
User git
IdentityFile ~/.ssh/github_key
在服务端authorized_keys
中添加:
from="192.168.1.*",expiry-time="20231231" ssh-ed25519 AAAAC3N... work@server1
结合Google Authenticator:
# 安装PAM模块
sudo apt install libpam-google-authenticator
# 编辑SSH PAM配置
/etc/pam.d/sshd 添加:
auth required pam_google_authenticator.so
限制命令执行:
command="/bin/journalctl -u nginx" ssh-ed25519 AAAAC3N... work@server1
限制源IP:
from="192.168.1.100" ssh-ed25519 AAAAC3N... work@server1
建议每3-6个月更换一次密钥:
# 生成新密钥
ssh-keygen -t ed25519 -f ~/.ssh/work_server1_$(date +%Y%m%d)
# 替换旧密钥
ssh-copy-id -i ~/.ssh/work_server1_20230815.pub user@server
- name: Deploy SSH keys
hosts: all
tasks:
- name: Ensure .ssh directory exists
file:
path: ~/.ssh
state: directory
mode: '0700'
- name: Add authorized key
authorized_key:
user: "{{ ansible_user }}"
state: present
key: "{{ lookup('file', '~/.ssh/work_server1.pub') }}"
resource "aws_key_pair" "admin" {
key_name = "admin-key"
public_key = file("~/.ssh/work_server1.pub")
}
# 查看SSH登录记录
journalctl -u sshd --since "1 hour ago"
# 检查认证日志
grep "sshd" /var/log/auth.log | grep "Accepted"
# 查找长时间未使用的密钥
find ~/.ssh/ -name "*.pub" -mtime +180 -exec ls -l {} \;
命令 | 说明 |
---|---|
ssh-keygen -l -f keyfile |
查看密钥指纹 |
ssh-add -L |
列出已加载的密钥 |
ssh-keygen -p -f keyfile |
更改密钥密码 |
ssh -T git@github.com |
测试GitHub连接 |
注意:本文所有操作应在测试环境验证后再应用于生产环境,密钥文件需妥善保管。 “`
这篇文章包含了从基础到进阶的SSH密钥认证完整实践指南,总字数约4200字。内容采用Markdown格式,包含代码块、表格、列表等元素,可以直接用于技术文档发布。需要调整细节或补充特定场景的内容可以进一步修改完善。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。