文章目录
- 一、简要概述
- 二、核心原理
- 三、详细操作步骤
-
- [1. 生成SSH密钥对](#1. 生成SSH密钥对)
- [2. 上传公钥到远程服务器](#2. 上传公钥到远程服务器)
- [3. 测试客户端免密登录](#3. 测试客户端免密登录)
- [4. 服务器配置强制密钥登录](#4. 服务器配置强制密钥登录)
- [5, 私钥密码短语](#5, 私钥密码短语)
一、简要概述
SSH密钥登录通过公钥-私钥非对称加密实现免密码安全登录,相比传统密码登录,能有效抵御暴力破解攻击。
此成果可以应用到下面2篇文章,实现ssh免密码输入数据转移
二、核心原理
SSH密钥登录依赖一对密钥:
- 私钥:保存在客户端(本地电脑/服务器),必须严格保密,用于身份验证的"密码"。
- 公钥:上传到远程服务器,用于验证客户端身份的"公开凭证"。
登录时,服务器向客户端发送随机数,客户端用私钥加密后返回,服务器用公钥解密验证,匹配则允许登录,全程无需输入密码
三、详细操作步骤
1. 生成SSH密钥对
在本地客户端生成密钥对,推荐使用Ed25519算法(比RSA更高效安全)或RSA 4096
bash
# 生成密钥对(默认RSA算法,可指定-b 4096)
ssh-keygen -t ed25519
#生成RSA 4096位密钥
ssh-keygen -t rsa -b 4096
- 系统会提示保存路径(默认~/.ssh/id_ed25519或~/.ssh/id_rsa),可直接回车确认
- 强烈建议设置密码短语(passphrase):为私钥增加一层保护,即使私钥泄露,无密码也无法使用
2. 上传公钥到远程服务器
- 方式1:
ssh-copy-id
bash
ssh-copy-id root@目标服务器IP
# 默认端口(22)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@目标服务器IP
# 非默认端口(如1022)
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 1022 root@目标服务器IP
若公钥在默认~/.ssh/目录下,可省略-i参数。
上传后,目标服务器~/.ssh/authorized_keys文件会添加一行公钥内容。
- 方法2:
手动复制公钥
在客户端服务器执行脚本
bash
#导入Ed25519公钥
cat ~/.ssh/id_ed25519.pub | ssh 用户名@服务器IP \
'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys \
&& chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
#导入RSA公钥
cat ~/.ssh/id_rsa.pub | ssh 用户名@服务器IP \
'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys \
&& chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
检查目录权限,不符合的话执行配置权限脚本(关键步骤,权限错误会导致免密失败)
本地客户端
bash
chmod 700 ~/.ssh # .ssh目录权限:仅所有者可读写执行
chmod 600 ~/.ssh/id_ed25519 # 私钥权限:仅所有者可读写
远程服务器
bash
# .ssh目录权限:仅所有者可读写执行
chmod 700 ~/.ssh
# 授权文件权限:仅所有者可读写
chmod 600 ~/.ssh/authorized_keys
3. 测试客户端免密登录
bash
#默认端口22
ssh root@目标服务器IP
#非默认端口1022
ssh -p 1022 root@目标服务器IP
4. 服务器配置强制密钥登录
bash
#删除配置项
sed -i '/PasswordAuthentication.*/d' /etc/ssh/sshd_config
sed -i '/PubkeyAuthentication.*/d' /etc/ssh/sshd_config
sed -i '/RSAAuthentication.*/d' /etc/ssh/sshd_config
sed -i '/AuthorizedKeysFile.*/d' /etc/ssh/sshd_config
#追加配置项
cat >>/etc/ssh/sshd_config<<EOF
PasswordAuthentication no
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
EOF
重启服务启用配置
bash
#重启sshd服务
systemctl restart sshd
5, 私钥密码短语
给私钥设置了密码短语,又不想每次都输入,可以使用ssh-agent缓存密码,输入1次保存1天。
ssh-agent是 Linux/Unix 系统中用于管理 SSH 私钥的代理工具,核心作用是在内存中缓存私钥,实现 SSH 免密码登录,同时避免私钥文件直接暴露在远程服务器,提升安全性。
启动一个临时的 ssh-agent 进程,并导出必要的环境变量(SSH_AUTH_SOCK 和 SSH_AGENT_PID),让当前 shell 会话能识别该代理。
bash
eval "$(ssh-agent -s)"
添加私钥到 ssh-agent
bash
# 首次添加需输入私钥的密码短语
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_ed25519
朋友们,你学会了吗?
--over--