SSH密钥登录完整流程与原理详解

文章目录

  • 一、简要概述
  • 二、核心原理
  • 三、详细操作步骤
    • [1. 生成SSH密钥对](#1. 生成SSH密钥对)
    • [2. 上传公钥到远程服务器](#2. 上传公钥到远程服务器)
    • [3. 测试客户端免密登录](#3. 测试客户端免密登录)
    • [4. 服务器配置强制密钥登录](#4. 服务器配置强制密钥登录)
    • [5, 私钥密码短语](#5, 私钥密码短语)

一、简要概述

SSH密钥登录通过公钥-私钥非对称加密实现免密码安全登录,相比传统密码登录,能有效抵御暴力破解攻击。

此成果可以应用到下面2篇文章,实现ssh免密码输入数据转移

一条Shell命令实现文件目录服务器间快速转移

一条Shell命令实现docker镜像服务器间快速转移

二、核心原理

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--

相关推荐
kk”15 小时前
Linux的组和权限管理
linux·运维·服务器
智购科技智能售货柜16 小时前
2026自动售货机整机可靠性测试:从高低温交变到EMC电磁兼容的认证工程实践~YH
运维·服务器·数据库·人工智能·物联网
酒神dnspup18 小时前
CDN 回源检测怎么做?用 DNSPup 验证节点命中、源站暴露与多地可用性
运维·服务器·网络·网络协议·tcp/ip
Rain的Java大神之路18 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
江南风月18 小时前
3分钟快速上手日志审计系统 WGLOG v2.2 更新了什么
运维·服务器·网络
孙克旭_18 小时前
Docker 镜像构建|Vue+SpringBoot+Go 多语言项目 Dockerfile 案例
linux·运维·vue.js·spring boot·docker·dockerfile
接口不宕机19 小时前
外贸公司实战:利用 1688API 自动化监控竞品价格,解决采购定价痛点
运维·自动化
旗开得胜马到成功19 小时前
可信备份技术解析:中科热备如何防范备份数据被攻击
运维·服务器
JavaPub-rodert20 小时前
使用 Docker 部署 Ollama:Docker Compose 一键运行 DeepSeek-R1 1.5B
运维·docker·容器
蓝速科技20 小时前
蓝速科技信创落地:平衡安全合规与项目成本的实战方案
android·运维·人工智能·科技·安全·电脑·鸿蒙