rsync文件同步遇到SSH端口非默认?教你如何轻松指定端口(附完整命令示例)
最近在折腾服务器数据迁移,你是不是也遇到过这种尴尬:用scp传大文件,传了几个小时,结果网络一抖,连接断了,进度归零,血压瞬间拉满。这种时候,rsync就成了救星,它能断点续传,只同步差异部分。但很多云服务器或者内部机器,为了安全考虑,SSH服务往往不跑在默认的22端口上,比如改成了2022、2222之类的。这时候,如果你直接把scp命令里的端口参数-P照搬到rsync上,铁定会报错“connection refused”。别慌,这不是rsync的锅,而是你打开它的方式不对。这篇文章,我就来手把手拆解,如何让rsync乖乖地通过你指定的非标准SSH端口进行高效、可靠的文件同步,附上我踩过坑后总结的完整命令和实战技巧。
1. 理解核心:为什么rsync需要特殊处理端口?
很多人第一次用rsync指定端口失败,根本原因在于没搞清楚rsync和SSH的关系。rsync本身是一个强大的文件同步工具,但它不直接处理网络连接。当我们需要跨机器同步时,rsync通常依赖一个“远程shell”来建立通道。在Linux/Unix世界里,这个默认的远程shell就是SSH。
所以,当你执行 rsync source user@remote_host:dest 时,背后实际发生的是:
rsync在本地启动。- 它通过系统默认的SSH配置(通常是22端口),去连接
remote_host。 - 连接成功后,它在远程主机上也启动一个
rsync进程(作为守护进程或通过SSH通道)。 - 两个
rsync进程通过这个加密的SSH通道通信,比较文件差异并传输数据。
因此,指定端口的本质,是指定rsync所使用的SSH客户端连接远程主机时的端口。你不能直接告诉rsync“用2022端口”,而是要告诉它:“请调用SSH,并且让SSH用2022端口去连接”。
这就引出了rsync的 -e (或 --rsh) 参数,它的全称是“remote shell”。你可以通过这个参数,自定义用来连接远程主机的shell命令。解决非默认端口问题的钥匙,就在这里。
2. 实战:使用 -e 参数指定SSH端口
理论清楚了,上手就简单。核心命令格式如下:
rsync [选项] -e "ssh -p 端口号" 源文件/目录 用户名@远程主机:目标路径
或者从远程同步到本地:
rsync [选项] -e "ssh -p 端口号" 用户名@远程主机:源路径 本地目标路径
关键点:-e "ssh -p 2022"。这里的 -p 是

&spm=1001.2101.3001.5002&articleId=153662149&d=1&t=3&u=52865f1d2fe749438fa62acd5623d701)

被折叠的 条评论
为什么被折叠?



