前言scp-next是一个 SCP 风格的 npm 包。他同时提供命令行工具和库用于通过 SSH 安全传输文件。虽然包名包含 SCP实际使用 SFTP不会为普通传输执行远程 Shell 命令。适合谁使用如果你需要在部署脚本、CI 流程或 Node.js 应用中传输文件scp-next可以减少重复封装。常见场景如下:将本地构建产物上传到服务器。从服务器下载日志或产物。用配置文件管理不同服务器环境。在应用代码中复用同一个传输客户端。安装方式全局安装后可以直接使用scp-next命令。npminstall--globalscp-next作为项目依赖安装后可以在 Node.js 代码中导入 API。npminstallscp-next如果一个项目只在脚本里调用命令行工具也可以把他安装到项目依赖中再通过npx scp-next或 npm scripts 调用。先理解传输方向命令行统一使用source destination两个位置参数。scp-next upload source destination [options] scp-next download source destination [options] scp-next run job [source] [destination] [options]方向规则如下:OperationSourceDestinationUploadLocalRemoteDownloadRemoteLocal命令行快速开始上传本地目录到远程服务器。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive下载远程文件到本地目录。如果目标目录不存在scp-next默认会创建目录。这符合日常cp和scp风格的使用习惯。可以用--no-create-directories关闭该行为。scp-next download /var/log/example.log ./logs/example.log\--hostyour-host\--usernameyour-username\--passwordyour-password先预览上传计划而不连接服务器。--dry-run会解析配置并检查本地路径。他不会连接远程服务器也不会修改本地或远程文件。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive\--dry-run推荐的凭据写法命令行密码参数适合本地快速试用。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive共享环境和生产环境建议使用环境变量。这样可以降低密码进入 Shell 历史记录或进程列表的风险。exportSCP_NEXT_HOSTyour-hostexportSCP_NEXT_USERNAMEyour-usernameexportSCP_NEXT_PASSWORDyour-passwordscp-next upload ./dist /var/www/example--recursive也可以使用受保护的私钥文件。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--private-key-file ~/.ssh/id_ed25519\--recursive常用命令选项选项作用--host hostSSH 服务器地址。--port portSSH 服务器端口默认值为22。--username usernameSSH 用户名。--password passwordSSH 密码。--private-key-file privateKeyFile私钥文件路径支持~。--passphrase passphrase加密私钥的口令。--config path指定配置文件路径。--profile name选择配置文件中的服务器配置。--recursive递归传输目录默认关闭。--overwrite允许覆盖已有目标文件。--create-directories创建缺失的目标目录默认开启。--no-create-directories关闭目标目录自动创建。--dry-run只解析和验证不执行传输。--timeout millisecondsSSH 握手超时时间单位为毫秒。--quiet关闭进度和非错误输出。--verbose输出不含敏感信息的诊断内容。配置文件用法CLI 会自动查找以下配置文件。scp-next.config.json .scp-nextrc .scp-nextrc.json也可以显式指定路径。scp-next upload ./dist /var/www/example\--config./scp-next.config.json\--profileproduction下面是一个包含服务器配置和任务的示例。{profiles:{production:{host:your-host,username:your-username,privateKeyFile:~/.ssh/id_ed25519}},jobs:{deploy:{operation:upload,profile:production,source:./dist,destination:/var/www/example,recursive:true,overwrite:true},download-logs:{operation:download,profile:production,source:/var/log/example,destination:./logs,recursive:true}}}运行配置好的上传任务。scp-next run deploy运行配置好的下载任务。scp-next run download-logsrun命令也支持临时覆盖路径。scp-next run deploy ./dist-canary /var/www/canary配置优先级从高到低如下。显式 CLI 选项位置参数环境变量选中的配置 profile根级配置值配置的 job 值内部默认值不要把包含真实密码的配置文件提交到 Public 仓库。共享仓库和部署环境应优先使用SCP_NEXT_PASSWORD或受保护的密钥文件。库 API 用法ESM 项目可以直接导入upload。import{upload}fromscp-next;awaitupload({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD,localPath:./dist,remotePath:/var/www/example,recursive:true,overwrite:true});CommonJS 项目可以使用require。const{download}require(scp-next);asyncfunctionmain(){awaitdownload({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD,remotePath:/var/log/example.log,localPath:./logs/example.log});}main().catch((error){console.error(error.message);process.exitCode1;});如果一次连接内要执行多个操作可以创建可复用客户端。import{createClient}fromscp-next;constclientcreateClient({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD});try{awaitclient.connect();awaitclient.upload(./dist,/var/www/example,{recursive:true});awaitclient.download(/var/log/example.log,./logs/example.log);}finally{awaitclient.close();}主要导出如下。upload(options);download(options);createClient(options);copy(options);错误类型包含稳定的code、可读的message和经过脱敏的上下文。常见错误包括ConfigurationError、AuthenticationError、ConnectionError、TransferError和HostVerificationError。主机验证scp-next支持通过hostFingerprint或knownHostsFile验证主机。如果没有显式配置他会读取~/.ssh/known_hosts。在 CI 或部署环境中如果没有可用的 known-hosts 文件建议配置hostFingerprint。如果无法建立主机验证scp-next会失败退出。新人接手清单接手项目时可以按以下顺序验证。确认 Node.js 版本不低于 18.18.0。使用npm install --global scp-next安装 CLI。用scp-next upload ... --dry-run验证参数和路径。掌握这几项后就可以把scp-next用于日常部署脚本、日志下载任务和 Node.js 文件传输流程。版权声明本文为原创文章作者保留版权。转载请保留本文完整内容并以超链接形式注明作者及原文出处。作者: 除除原文: https://blog.mazey.net/6454.html(完)
scp-next v1.0.19 项目介绍: 面向 Node.js 开发者的 SSH 文件传输工具
前言scp-next是一个 SCP 风格的 npm 包。他同时提供命令行工具和库用于通过 SSH 安全传输文件。虽然包名包含 SCP实际使用 SFTP不会为普通传输执行远程 Shell 命令。适合谁使用如果你需要在部署脚本、CI 流程或 Node.js 应用中传输文件scp-next可以减少重复封装。常见场景如下:将本地构建产物上传到服务器。从服务器下载日志或产物。用配置文件管理不同服务器环境。在应用代码中复用同一个传输客户端。安装方式全局安装后可以直接使用scp-next命令。npminstall--globalscp-next作为项目依赖安装后可以在 Node.js 代码中导入 API。npminstallscp-next如果一个项目只在脚本里调用命令行工具也可以把他安装到项目依赖中再通过npx scp-next或 npm scripts 调用。先理解传输方向命令行统一使用source destination两个位置参数。scp-next upload source destination [options] scp-next download source destination [options] scp-next run job [source] [destination] [options]方向规则如下:OperationSourceDestinationUploadLocalRemoteDownloadRemoteLocal命令行快速开始上传本地目录到远程服务器。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive下载远程文件到本地目录。如果目标目录不存在scp-next默认会创建目录。这符合日常cp和scp风格的使用习惯。可以用--no-create-directories关闭该行为。scp-next download /var/log/example.log ./logs/example.log\--hostyour-host\--usernameyour-username\--passwordyour-password先预览上传计划而不连接服务器。--dry-run会解析配置并检查本地路径。他不会连接远程服务器也不会修改本地或远程文件。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive\--dry-run推荐的凭据写法命令行密码参数适合本地快速试用。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--passwordyour-password\--recursive共享环境和生产环境建议使用环境变量。这样可以降低密码进入 Shell 历史记录或进程列表的风险。exportSCP_NEXT_HOSTyour-hostexportSCP_NEXT_USERNAMEyour-usernameexportSCP_NEXT_PASSWORDyour-passwordscp-next upload ./dist /var/www/example--recursive也可以使用受保护的私钥文件。scp-next upload ./dist /var/www/example\--hostyour-host\--usernameyour-username\--private-key-file ~/.ssh/id_ed25519\--recursive常用命令选项选项作用--host hostSSH 服务器地址。--port portSSH 服务器端口默认值为22。--username usernameSSH 用户名。--password passwordSSH 密码。--private-key-file privateKeyFile私钥文件路径支持~。--passphrase passphrase加密私钥的口令。--config path指定配置文件路径。--profile name选择配置文件中的服务器配置。--recursive递归传输目录默认关闭。--overwrite允许覆盖已有目标文件。--create-directories创建缺失的目标目录默认开启。--no-create-directories关闭目标目录自动创建。--dry-run只解析和验证不执行传输。--timeout millisecondsSSH 握手超时时间单位为毫秒。--quiet关闭进度和非错误输出。--verbose输出不含敏感信息的诊断内容。配置文件用法CLI 会自动查找以下配置文件。scp-next.config.json .scp-nextrc .scp-nextrc.json也可以显式指定路径。scp-next upload ./dist /var/www/example\--config./scp-next.config.json\--profileproduction下面是一个包含服务器配置和任务的示例。{profiles:{production:{host:your-host,username:your-username,privateKeyFile:~/.ssh/id_ed25519}},jobs:{deploy:{operation:upload,profile:production,source:./dist,destination:/var/www/example,recursive:true,overwrite:true},download-logs:{operation:download,profile:production,source:/var/log/example,destination:./logs,recursive:true}}}运行配置好的上传任务。scp-next run deploy运行配置好的下载任务。scp-next run download-logsrun命令也支持临时覆盖路径。scp-next run deploy ./dist-canary /var/www/canary配置优先级从高到低如下。显式 CLI 选项位置参数环境变量选中的配置 profile根级配置值配置的 job 值内部默认值不要把包含真实密码的配置文件提交到 Public 仓库。共享仓库和部署环境应优先使用SCP_NEXT_PASSWORD或受保护的密钥文件。库 API 用法ESM 项目可以直接导入upload。import{upload}fromscp-next;awaitupload({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD,localPath:./dist,remotePath:/var/www/example,recursive:true,overwrite:true});CommonJS 项目可以使用require。const{download}require(scp-next);asyncfunctionmain(){awaitdownload({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD,remotePath:/var/log/example.log,localPath:./logs/example.log});}main().catch((error){console.error(error.message);process.exitCode1;});如果一次连接内要执行多个操作可以创建可复用客户端。import{createClient}fromscp-next;constclientcreateClient({host:process.env.SCP_NEXT_HOST,username:process.env.SCP_NEXT_USERNAME,password:process.env.SCP_NEXT_PASSWORD});try{awaitclient.connect();awaitclient.upload(./dist,/var/www/example,{recursive:true});awaitclient.download(/var/log/example.log,./logs/example.log);}finally{awaitclient.close();}主要导出如下。upload(options);download(options);createClient(options);copy(options);错误类型包含稳定的code、可读的message和经过脱敏的上下文。常见错误包括ConfigurationError、AuthenticationError、ConnectionError、TransferError和HostVerificationError。主机验证scp-next支持通过hostFingerprint或knownHostsFile验证主机。如果没有显式配置他会读取~/.ssh/known_hosts。在 CI 或部署环境中如果没有可用的 known-hosts 文件建议配置hostFingerprint。如果无法建立主机验证scp-next会失败退出。新人接手清单接手项目时可以按以下顺序验证。确认 Node.js 版本不低于 18.18.0。使用npm install --global scp-next安装 CLI。用scp-next upload ... --dry-run验证参数和路径。掌握这几项后就可以把scp-next用于日常部署脚本、日志下载任务和 Node.js 文件传输流程。版权声明本文为原创文章作者保留版权。转载请保留本文完整内容并以超链接形式注明作者及原文出处。作者: 除除原文: https://blog.mazey.net/6454.html(完)