2.6.3 密钥管理与无密码登录
密钥管理与无密码登录#
1. 密钥认证原理与优势#
- 基于非对称加密:客户端持有私钥,服务器保存公钥。
- 优势:防暴力破解、便于自动化、可细粒度控制登录权限。
- 原理草图:
2. 生成与管理密钥对#
sudo apt-get update && sudo apt-get install -y openssh-client
sudo yum install -y openssh-clients
ssh-keygen -t ed25519 -C "devops@workstation" -f ~/.ssh/id_ed25519
ssh-keygen -t rsa -b 4096 -C "devops@legacy" -f ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
ls -l ~/.ssh
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l # 查看已加载密钥
3. 配置无密码登录#
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
cat ~/.ssh/id_ed25519.pub
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... devops@workstation" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh -i ~/.ssh/id_ed25519 user@server "hostname && whoami"
4. 多主机与多密钥场景#
cat > ~/.ssh/config <<'EOF'
Host prod-1
HostName 10.0.0.1
User deploy
IdentityFile ~/.ssh/id_ed25519_prod
IdentitiesOnly yes
Host dev-1
HostName 10.0.0.2
User dev
IdentityFile ~/.ssh/id_ed25519_dev
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config
ssh prod-1 "id"
ssh dev-1 "id"
- 说明:
IdentityFile:指定私钥路径。
IdentitiesOnly:仅尝试指定密钥,避免误用其他密钥。
5. 代理与跳板机#
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh -A user@bastion
ssh -J bastion user@10.0.1.10
cat >> ~/.ssh/config <<'EOF'
Host inner-1
HostName 10.0.1.10
User app
ProxyJump bastion
EOF
ssh inner-1 "hostname"
6. 密钥生命周期与安全策略#
ssh-keygen -t ed25519 -C "devops@2024" -f ~/.ssh/id_ed25519_2024
ssh-copy-id -i ~/.ssh/id_ed25519_2024.pub user@server
ssh -i ~/.ssh/id_ed25519_2024 user@server "echo OK"
sed -i '/devops@workstation/d' ~/.ssh/authorized_keys
cat >> ~/.ssh/authorized_keys <<'EOF'
from="10.0.0.0/24",command="/usr/local/bin/backup.sh" ssh-ed25519 AAAA... backup@job
EOF
- 失窃处理:
- 立即删除对应公钥、审查登录记录、轮换密钥。
- 禁止共享密钥:
- 每人/每系统独立密钥,便于审计与撤销。
7. 常见问题与排查#
ls -ld ~ ~/.ssh
ls -l ~/.ssh/authorized_keys
ssh -vvv user@server
grep -E 'PubkeyAuthentication|AuthorizedKeysFile' /etc/ssh/sshd_config
sudo systemctl restart sshd
getenforce
restorecon -Rv ~/.ssh
8. 练习与实战#
- 练习 1:为三台主机配置不同密钥与别名连接。
- 目标:使用
ssh prod-1、ssh dev-1 无密码登录。
- 练习 2:搭建跳板机访问内网主机。
- 目标:
ssh -J bastion user@inner 成功。
- 练习 3:密钥轮换演练。
- 目标:新密钥上线并删除旧公钥,确保服务不中断。