
🍃 予枫 :个人主页
📚 个人专栏 : 《Java 从入门到起飞》《读研码农的干货日常》
💻 Debug 这个世界,Return 更好的自己!
引言
做Linux运维或后端开发,远程连接服务器是日常操作。密码登录不仅要反复输入密码,还存在被暴力破解的风险;而SSH密钥认证,既能实现免密登录提升效率,又能通过加密机制保障连接安全。今天就从原理到实操,拆解SSH对称与非对称加密,手把手教你用ssh-keygen生成密钥对、ssh-copy-id配置免密,再对比scp与rsync的远程传输用法,新手也能快速上手。
文章目录
- 引言
- 一、SSH远程与密钥认证核心原理
-
- [1.1 对称加密](#1.1 对称加密)
- [1.2 非对称加密](#1.2 非对称加密)
- [1.3 SSH密钥认证的完整流程(必懂)](#1.3 SSH密钥认证的完整流程(必懂))
- 二、免密登录配置(ssh-keygen+ssh-copy-id实操)
-
- [2.1 第一步:客户端生成密钥对(ssh-keygen)](#2.1 第一步:客户端生成密钥对(ssh-keygen))
- [2.2 第二步:将公钥上传到服务器(ssh-copy-id)](#2.2 第二步:将公钥上传到服务器(ssh-copy-id))
- [2.3 第三步:验证免密登录](#2.3 第三步:验证免密登录)
- 三、scp与rsync远程文件传输同步详解
-
- [3.1 scp命令(简单直接,适合少量文件传输)](#3.1 scp命令(简单直接,适合少量文件传输))
- [3.2 rsync命令(高效灵活,适合大量文件/同步场景)](#3.2 rsync命令(高效灵活,适合大量文件/同步场景))
- 四、常见问题与避坑技巧(必看)
- 五、总结
一、SSH远程与密钥认证核心原理
SSH(Secure Shell)是一种加密的网络传输协议,核心作用是实现客户端与服务器之间的安全远程连接,替代了明文传输的Telnet协议,避免了数据被监听、篡改的风险。其加密机制主要分为两种,对应不同的使用场景:
1.1 对称加密
对称加密又称单密钥加密,核心特点是「加密和解密使用同一个密钥」。
- 原理:客户端与服务器协商好一个共同的密钥,客户端发送数据时用该密钥加密,服务器接收后用同一个密钥解密;反之亦然。
- 优势:加密、解密速度极快,适合大量数据传输场景。
- 不足:密钥的传输的过程存在安全隐患------如果密钥在传输中被截取,攻击者就能破解所有加密数据。
小贴士:SSH不会单独使用对称加密,通常会结合非对称加密,解决密钥传输的安全问题。
1.2 非对称加密
非对称加密又称双密钥加密,核心特点是「加密和解密使用不同的密钥」,分为公钥(Public Key)和私钥(Private Key):
- 私钥:仅保存在客户端本地,是核心密钥,绝对不能泄露(相当于你的"身份证",只有你自己拥有)。
- 公钥:可以公开传输,甚至可以分享给任意服务器(相当于你的"名片",别人可以持有,但无法用它冒充你)。
- 原理:用公钥加密的数据,只能用对应的私钥解密;用私钥加密的数据,只能用对应的公钥解密。SSH密钥认证,就是基于这个原理实现的。
1.3 SSH密钥认证的完整流程(必懂)
- 客户端通过ssh-keygen生成一对密钥(公钥+私钥);
- 客户端将自己的公钥,通过ssh-copy-id或手动方式上传到目标服务器;
- 客户端发起SSH连接请求时,服务器会生成一个随机字符串,并用客户端上传的公钥加密,发送给客户端;
- 客户端接收后,用自己的私钥解密该字符串,再将解密后的结果发送回服务器;
- 服务器验证客户端返回的结果,与自己生成的随机字符串一致,就允许客户端免密登录。
重点:整个过程中,私钥始终保存在客户端,从未传输过,因此即使公钥被截取,也无法破解连接,安全性拉满 ✅
二、免密登录配置(ssh-keygen+ssh-copy-id实操)
实操环境:客户端(Linux/Mac)、服务器(Linux,CentOS/Ubuntu均可),全程命令行操作,步骤简单,跟着敲就行,建议收藏备用!
2.1 第一步:客户端生成密钥对(ssh-keygen)
打开客户端终端,输入以下命令,无需修改默认参数,全程回车即可:
bash
ssh-keygen -t rsa
- 命令解析:
ssh-keygen:生成SSH密钥对的核心命令;-t rsa:指定加密算法为RSA(最常用、兼容性最好,也可选择ed25519,安全性更高)。
执行结果说明:
- 会提示你"指定密钥保存路径",默认路径是
~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥),直接回车即可; - 会提示"设置密钥密码"(可选),如果设置,每次使用私钥登录时需要输入密码,进一步提升安全性;如果追求极致便捷,直接回车跳过(建议运维场景跳过,开发场景可设置);
- 执行完成后,进入
~/.ssh目录,即可看到生成的两个密钥文件:id_rsa:私钥,妥善保管,不要删除、不要泄露;id_rsa.pub:公钥,后续需要上传到服务器。
2.2 第二步:将公钥上传到服务器(ssh-copy-id)
客户端终端输入以下命令,将公钥一键上传到目标服务器,无需手动复制粘贴:
bash
ssh-copy-id 用户名@服务器IP
- 示例:
ssh-copy-id root@192.168.1.100(root是服务器用户名,192.168.1.100是服务器IP); - 首次执行时,会提示"确认连接服务器",输入
yes回车,再输入服务器的登录密码(仅这一次需要输密码,后续免密); - 执行成功后,会提示"number of key(s) added",表示公钥已成功上传到服务器。
手动上传备用方案(如果ssh-copy-id不可用):
如果服务器禁止ssh-copy-id命令,可手动复制公钥内容到服务器,步骤如下:
-
客户端查看公钥内容:
cat ~/.ssh/id_rsa.pub,复制输出的全部内容; -
登录服务器,进入
~/.ssh目录(如果没有该目录,执行mkdir ~/.ssh创建); -
编辑authorized_keys文件(如果没有,执行
touch ~/.ssh/authorized_keys创建):vim ~/.ssh/authorized_keys; -
将复制的公钥内容粘贴到文件中,保存退出(vim操作:按i编辑,粘贴后按Esc,输入:wq保存退出);
-
设置文件权限(关键,否则密钥认证无效):
bashchmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
2.3 第三步:验证免密登录
客户端终端输入SSH连接命令,无需输入密码,即可直接登录服务器:
bash
ssh 用户名@服务器IP
- 示例:
ssh root@192.168.1.100; - 如果能直接进入服务器终端,说明免密登录配置成功!🎉
- 温馨提示:配置完成后,建议点赞收藏,后续远程连接直接复制命令,省去输密码的麻烦。
三、scp与rsync远程文件传输同步详解
配置好SSH免密登录后,除了远程登录,我们还经常需要在客户端与服务器之间传输文件,scp和rsync是最常用的两个命令,各有优势,按需选择即可。
3.1 scp命令(简单直接,适合少量文件传输)
scp(Secure Copy)是基于SSH协议的文件传输命令,核心特点是「简单、稳定」,适合少量文件、单个文件的快速传输,用法和cp命令类似。
核心用法(3种常用场景)
-
客户端 → 服务器(上传文件):
bashscp 本地文件路径 用户名@服务器IP:服务器目标路径- 示例:
scp ~/test.txt root@192.168.1.100:/root/(将本地家目录的test.txt,上传到服务器root目录下);
- 示例:
-
服务器 → 客户端(下载文件):
bashscp 用户名@服务器IP:服务器文件路径 本地目标路径- 示例:
scp root@192.168.1.100:/root/data.zip ~/Downloads/(将服务器root目录的data.zip,下载到本地Downloads目录);
- 示例:
-
传输目录(加-r参数):
bash# 客户端上传目录到服务器 scp -r 本地目录路径 用户名@服务器IP:服务器目标路径 # 示例:scp -r ~/project root@192.168.1.100:/root/
scp优势与不足
- 优势:命令简单,无需额外安装(Linux/Mac默认自带),传输过程加密,安全性高;
- 不足:不支持断点续传,如果传输大文件时中断,需要重新传输,效率较低。
3.2 rsync命令(高效灵活,适合大量文件/同步场景)
rsync(Remote Sync)也是基于SSH协议的工具,核心特点是「增量同步」,适合大量文件、大文件传输,以及定期同步场景,效率比scp更高。
核心用法(常用场景)
-
安装rsync(如果未安装):
- CentOS:
yum install rsync -y - Ubuntu:
apt install rsync -y - 客户端和服务器都需要安装(部分系统默认已安装)。
- CentOS:
-
客户端 → 服务器(上传/同步目录):
bashrsync -avz 本地目录路径 用户名@服务器IP:服务器目标路径- 示例:
rsync -avz ~/project root@192.168.1.100:/root/; - 命令解析:
-a:归档模式,保留文件的权限、所有者、时间戳等属性,等同于-rlptgoD;-v:显示传输过程( verbose),可以看到哪些文件正在传输;-z:传输时压缩文件,减少网络带宽占用,提升传输速度。
- 示例:
-
服务器 → 客户端(下载/同步目录):
bashrsync -avz 用户名@服务器IP:服务器目录路径 本地目标路径- 示例:
rsync -avz root@192.168.1.100:/root/logs ~/(将服务器logs目录,同步到本地家目录)。
- 示例:
rsync优势与不足
- 优势:支持增量同步(只传输修改过的文件/内容),支持断点续传,传输大文件、大量文件时效率远超scp;
- 不足:命令参数比scp多,入门稍复杂,但掌握
-avz三个核心参数,就能满足90%的日常需求。
scp与rsync对比总结(建议收藏)
| 特性 | scp | rsync |
|---|---|---|
| 核心功能 | 简单文件传输 | 增量文件同步+传输 |
| 断点续传 | 不支持 | 支持 |
| 压缩传输 | 可选(-C参数) | 支持(-z参数) |
| 传输效率 | 适合少量/单个文件 | 适合大量/大文件 |
| 易用性 | 高(命令简单) | 中(核心参数易掌握) |
总结:少量文件用scp,快速便捷;大量文件、定期同步用rsync,高效省带宽 ✅
四、常见问题与避坑技巧(必看)
-
配置免密登录后,仍然需要输密码?
- 排查1:服务器
~/.ssh目录权限是否为700,authorized_keys文件权限是否为600(权限过高/过低都会导致密钥认证失效); - 排查2:客户端上传的公钥,是否与服务器
authorized_keys中的内容一致; - 排查3:客户端私钥路径是否正确(默认是 ~/.ssh/id_rsa,若修改过路径,需要用
-i参数指定:ssh -i 私钥路径 用户名@服务器IP)。
- 排查1:服务器
-
rsync传输时,提示"permission denied"?
- 原因:服务器目标路径的权限不足,客户端用户没有写入权限;
- 解决:修改服务器目标路径权限(如
chmod 777 /root/temp),或切换到有写入权限的用户。
-
密钥丢失/泄露怎么办?
- 私钥丢失:客户端重新执行
ssh-keygen生成新的密钥对,重新上传公钥到服务器即可; - 私钥泄露:立即删除服务器
authorized_keys中对应的公钥,重新生成密钥对并上传,避免攻击者利用泄露的私钥登录服务器。
- 私钥丢失:客户端重新执行
五、总结
本文从SSH密钥认证的核心原理出发,拆解了对称加密与非对称加密的区别,详解了ssh-keygen生成密钥对、ssh-copy-id配置免密登录的完整实操步骤,再对比了scp与rsync两种远程传输工具的用法和场景,覆盖了Linux运维、后端开发中远程连接的高频需求。
掌握SSH密钥认证,既能告别反复输密码的麻烦,提升工作效率,又能大幅提升远程连接的安全性,避免密码被暴力破解的风险;而scp与rsync的灵活运用,能让远程文件传输、同步更高效。
新手建议先跟着实操步骤配置一遍免密登录,再尝试用scp、rsync传输文件,遇到问题可查看"常见问题"部分,基本都能解决。
✨ 我是予枫,关注我,下期带你解锁更多实用技术技巧!
💬 评论区留言:你在配置SSH免密时遇到过哪些坑?或者有更好的技巧,欢迎一起交流~
👍 觉得本文对你有帮助,记得点赞+收藏,避免下次找不到!