scp-upload-cli
v1.2.1758157034
Published
A convenient CLI tool for uploading files to remote servers via SCP protocol
Maintainers
Readme
SCP 文件上传工具
一个便捷的命令行工具,用于通过SCP协议将本地文件快速上传到远程服务器。
✨ 特性
- 🚀 快速上传: 基于SSH2协议的高效文件传输
- 🔒 安全可靠: 支持密码和私钥认证,确保传输安全
- 📊 进度显示: 实时显示上传进度和传输速度
- 💾 配置管理: 保存常用服务器配置,支持快速选择
- 🔄 自动重试: 内置重试机制,提高传输成功率
- 🎨 友好界面: 美观的交互式命令行界面
- ⚡ 错误处理: 完善的错误处理和用户提示
📦 安装
方式一:从源码安装
# 克隆项目
git clone <repository-url>
cd upload-file-cli
# 安装依赖
npm install
# 全局安装(可选)
npm install -g .方式二:直接运行
# 安装依赖后直接运行
npm start🚀 快速开始
基本使用
运行工具:
# 如果全局安装
scp-upload
# 或者直接运行
npm start命令行等效功能
本工具实现了与以下SCP命令相同的功能:
scp /Users/xxx/Downloads/.env [email protected]:/data/config/playground/.env📖 使用指南
主菜单选项
启动工具后,您将看到以下选项:
- 📤 上传文件 - 开始文件上传流程
- ⚙️ 管理服务器配置 - 添加、编辑或删除服务器配置
- 📋 查看已保存的配置 - 列出所有保存的服务器配置
- ❌ 退出 - 退出程序
文件上传流程
1. 选择服务器配置
- 使用已保存配置: 如果您之前保存过服务器配置,可以直接选择使用
- 手动输入: 首次使用或需要连接新服务器时,手动输入连接信息
2. 输入文件信息
- 本地文件路径: 要上传的文件的完整路径
- 远程文件路径: 文件在服务器上的目标路径
3. 选择认证方式
- 密码认证: 输入SSH密码
- 私钥认证: 指定私钥文件路径
- 默认SSH密钥: 使用
~/.ssh/id_rsa默认密钥
配置管理
添加服务器配置
- 选择 "⚙️ 管理服务器配置"
- 选择 "➕ 添加新配置"
- 输入以下信息:
- 配置名称(用于识别)
- 服务器IP地址
- 用户名
- SSH端口(默认22)
- 默认远程目录
- 私钥文件路径(可选)
管理现有配置
- 查看配置: 列出所有保存的配置及其详细信息
- 删除配置: 删除不再需要的服务器配置
- 导出配置: 将配置导出到文件
- 导入配置: 从文件导入配置
🔧 配置文件
配置文件存储在用户主目录下:
~/.scp-upload-cli/servers.json配置文件格式:
{
"my-server": {
"host": "192.168.1.100",
"username": "root",
"port": 22,
"defaultRemotePath": "/data/uploads",
"privateKeyPath": "/Users/username/.ssh/id_rsa",
"createdAt": "2024-01-01T00:00:00.000Z",
"lastUsed": "2024-01-01T12:00:00.000Z"
}
}🛡️ 安全特性
认证方式
SSH密钥认证(推荐)
- 支持RSA、DSA、ECDSA、Ed25519密钥
- 自动检测默认SSH密钥
- 验证私钥文件权限
密码认证
- 密码不会保存到配置文件
- 支持密码输入隐藏
安全验证
- 主机地址验证: 检查IP地址和域名格式
- 端口验证: 验证端口范围和常见服务端口警告
- 路径验证: 检查文件路径安全性
- 权限检查: 验证文件读取权限
- 私钥验证: 检查私钥文件格式和权限
📊 功能特性
进度显示
- 实时上传进度百分比
- 传输速度显示
- 文件大小和已传输大小
- 预估剩余时间
错误处理
- 自动重试机制(最多3次)
- 详细的错误信息提示
- 网络中断恢复
- 文件权限检查
用户体验
- 彩色输出和图标
- 清晰的操作提示
- 配置记忆功能
- 最近使用配置优先显示
🔍 故障排除
常见问题
1. 连接失败
❌ 连接服务器失败: connect ECONNREFUSED解决方案:
- 检查服务器IP地址和端口是否正确
- 确认服务器SSH服务正在运行
- 检查网络连接和防火墙设置
2. 认证失败
❌ 认证失败: All configured authentication methods failed解决方案:
- 检查用户名和密码是否正确
- 确认私钥文件路径和权限
- 验证服务器是否允许该用户登录
3. 文件权限错误
❌ 没有读取文件的权限解决方案:
- 检查本地文件的读取权限
- 使用
chmod 644 filename修改文件权限 - 确认当前用户有访问文件的权限
4. 远程目录不存在
❌ 创建远程目录失败解决方案:
- 确认远程路径正确
- 检查远程用户是否有创建目录的权限
- 手动在服务器上创建目标目录
调试模式
如需更详细的错误信息,可以查看终端输出的完整错误堆栈。
📝 开发信息
技术栈
- Node.js: 运行环境
- SSH2: SSH连接和SFTP传输
- Inquirer: 交互式命令行界面
- Chalk: 彩色终端输出
- Ora: 加载动画和进度显示
- fs-extra: 增强的文件系统操作
项目结构
upload-file-cli/
├── bin/
│ └── cli.js # 主程序入口
├── lib/
│ ├── scp-uploader.js # SCP上传核心模块
│ ├── config-manager.js # 配置管理模块
│ └── validator.js # 验证器模块
├── package.json # 项目配置
├── README.md # 说明文档
└── .gitignore # Git忽略文件依赖说明
ssh2: SSH2协议实现,用于建立安全连接inquirer: 提供交互式命令行界面chalk: 终端文本着色ora: 终端加载动画fs-extra: 文件系统操作增强commander: 命令行参数解析
🤝 贡献
欢迎提交Issue和Pull Request来改进这个工具!
开发环境设置
# 克隆项目
git clone <repository-url>
cd upload-file-cli
# 安装依赖
npm install
# 运行开发版本
npm start📄 许可证
MIT License
🆘 支持
如果您遇到问题或有功能建议,请:
- 查看本文档的故障排除部分
- 在GitHub上提交Issue
- 发送邮件至开发者邮箱
享受快速、安全的文件上传体验! 🚀
