本项目是一个基于SSH协议的高效文件传输工具,支持在多台服务器之间直接传输文件/目录,具有以下特性:
- 文件/目录传输:支持本地与远程、远程与远程之间的文件/目录传输
- 进度显示:实时显示传输进度、速度和剩余时间
- 压缩传输:支持目录压缩传输,提高大文件传输效率
- 直接传输模式:支持服务器间直接传输,无需本地中转
- 多服务器并行传输:支持同时向多个目标服务器传输文件
sync <文件路径> [--to <目标主机名>|--all] [--direct] [--compress]
--to:指定目标主机名--all:向所有已连接主机传输--direct:启用服务器间直接传输模式--compress:启用压缩传输模式(仅对目录有效)
- 向特定主机传输文件:
sync /path/to/file --to host1
- 向所有主机传输目录(使用压缩):
sync /path/to/dir --all --compress
- 服务器间直接传输:
sync /remote/path --to host2 --direct
- 使用Go语言开发,跨平台支持
- 基于
golang.org/x/crypto/ssh实现SSH连接 - 使用SFTP协议进行文件传输
- 多协程并发处理提高传输效率
- 确保所有服务器已配置SSH免密登录
- 直接传输模式需要服务器间网络互通
- 压缩传输会消耗额外CPU资源
- 支持更多传输协议(HTTP/HTTPS/FTP)
- 增加传输加密功能
- 优化进度显示界面
- 支持多服务器并行传输
- 支持断点续传
-
配置服务器连接信息
- 编辑config.yaml文件,添加服务器信息
- 示例配置:
servers: - host: 192.168.1.100 port: 22 user: root password: "your_password"
-
执行传输命令
- 完整命令语法:
./go-ssh sync [选项] <源路径> <目标路径> - 常用选项:
- -c: 启用压缩传输
- -t: 设置超时时间(秒)
- -r: 递归传输目录
- -p: 显示进度条
- 示例命令:
./go-ssh sync -c -p /local/path user@host:/remote/path
- 完整命令语法:
-
查看传输进度和结果
- 进度条会实时显示传输百分比和速度
- 传输完成后会显示总结信息
- 错误信息会记录在log/transfer.log中
// 创建SSH客户端连接
client, err := ssh.Dial("tcp", "host:22", &ssh.ClientConfig{
User: "username",
Auth: []ssh.AuthMethod{
ssh.Password("password"),
},
})
// 传输文件
TransferFileToServer(client, "/local/path", "/remote/path", "username", "host")