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

相关推荐
DP DPharness31 分钟前
浏览器自动化插件时,三个可核对的判断维度
运维·自动化
姜鱼问生1 小时前
数据库备份 + 灾难恢复演练:从 dump 恢复全库
运维·数据库
姜鱼问生1 小时前
宝塔面板优雅下线:先 stop 再 disable 再 rm
运维·服务器
闭包不眠2 小时前
PDF文字提取交付前该检查什么
运维·服务器·图像处理·人工智能·计算机视觉·pdf
吴声子夜歌2 小时前
Nginx应用与运维——Nginx在Kubernetes中的应用(一)
运维·nginx·kubernetes
苏三的开发日记2 小时前
百度网盘p2p加速文件存储位置修改记录
运维
LabVIEW开发3 小时前
Anritsu 2602A:频谱仪的几种测量怎么自动跑
运维·服务器·labview·labview知识·labview功能·labview程序
2401_868534783 小时前
存储系统规划设计
运维·服务器·智能路由器
螺蛳粉 螺蛳粉3 小时前
第一篇:Keepalived 高可用实战:VIP 漂移与 Nginx 主备切换完整指南
运维·nginx·负载均衡·keepalived·高可用
荣合技术服务3 小时前
VMware ESXi 虚拟化平台服务器虚拟机数据恢复服务
linux·运维·服务器