npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

scp-upload-cli

v1.2.1758157034

Published

A convenient CLI tool for uploading files to remote servers via SCP protocol

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. 📋 查看已保存的配置 - 列出所有保存的服务器配置
  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. 发送邮件至开发者邮箱

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