Skip to content

Tenwq/scp-upload-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 root@xxx.xxx.xxx.xxx:/data/config/playground/.env

📖 使用指南

主菜单选项

启动工具后,您将看到以下选项:

  1. 📤 上传文件 - 开始文件上传流程
  2. ⚙️ 管理服务器配置 - 添加、编辑或删除服务器配置
  3. 📋 查看已保存的配置 - 列出所有保存的服务器配置
  4. ❌ 退出 - 退出程序

文件上传流程

1. 选择服务器配置

  • 使用已保存配置: 如果您之前保存过服务器配置,可以直接选择使用
  • 手动输入: 首次使用或需要连接新服务器时,手动输入连接信息

2. 输入文件信息

  • 本地文件路径: 要上传的文件的完整路径
  • 远程文件路径: 文件在服务器上的目标路径

3. 选择认证方式

  • 密码认证: 输入SSH密码
  • 私钥认证: 指定私钥文件路径
  • 默认SSH密钥: 使用 ~/.ssh/id_rsa 默认密钥

配置管理

添加服务器配置

  1. 选择 "⚙️ 管理服务器配置"
  2. 选择 "➕ 添加新配置"
  3. 输入以下信息:
    • 配置名称(用于识别)
    • 服务器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"
  }
}

🛡️ 安全特性

认证方式

  1. SSH密钥认证(推荐)

    • 支持RSA、DSA、ECDSA、Ed25519密钥
    • 自动检测默认SSH密钥
    • 验证私钥文件权限
  2. 密码认证

    • 密码不会保存到配置文件
    • 支持密码输入隐藏

安全验证

  • 主机地址验证: 检查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

🆘 支持

如果您遇到问题或有功能建议,请:

  1. 查看本文档的故障排除部分
  2. 在GitHub上提交Issue
  3. 发送邮件至开发者邮箱

享受快速、安全的文件上传体验! 🚀

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published