微信网站如何制作,做网站 聊城,哈尔滨 建网站,建筑方案设计怎么写ssh2-sftp-client 本身是一个专门用于处理 SFTP文件操作的库#xff0c;它不直接提供执行远程命令的功能。但是可以通过它的底层依赖库 ssh2 实现执行命令的功能。 以下是实现方法和示例代码#xff1a; 方法一#xff1a;使用 ssh2 执行远程命令
ssh2 是 ssh2-sftp-client… ssh2-sftp-client 本身是一个专门用于处理 SFTP文件操作的库它不直接提供执行远程命令的功能。但是可以通过它的底层依赖库 ssh2 实现执行命令的功能。 以下是实现方法和示例代码 方法一使用 ssh2 执行远程命令
ssh2 是 ssh2-sftp-client 的底层库它支持执行远程命令。
安装依赖
如果尚未安装 ssh2可以通过以下命令安装
npm install ssh2代码示例
const { Client } require(ssh2);const serverOptions {host: your-server-ip,port: 22,username: your-username,password: your-password, // 或者使用 privateKey
};const command ls -l /home/cuijiying/log_tools;const conn new Client();conn.on(ready, () {console.log(SSH 连接成功);conn.exec(command, (err, stream) {if (err) throw err;stream.on(close, (code, signal) {console.log(命令执行完成退出代码${code});conn.end();}).on(data, (data) {console.log(输出\n data.toString());}).stderr.on(data, (data) {console.error(错误\n data.toString());});});
}).connect(serverOptions);输出解释
标准输出通过 stream.on(data) 接收。错误输出通过 stream.stderr.on(data) 接收。 方法二结合 ssh2-sftp-client 和 ssh2
如果你同时需要执行命令和进行 SFTP 文件操作可以同时使用 ssh2 和 ssh2-sftp-client。
代码示例
const { Client } require(ssh2);
const SftpClient require(ssh2-sftp-client);const serverOptions {host: your-server-ip,port: 22,username: your-username,password: your-password,
};const command df -h; // 示例命令查看磁盘使用情况
const sftp new SftpClient();
const conn new Client();async function executeCommand() {return new Promise((resolve, reject) {conn.on(ready, () {console.log(SSH 连接成功);conn.exec(command, (err, stream) {if (err) return reject(err);let output ;stream.on(close, (code, signal) {console.log(命令执行完成退出代码${code});conn.end();resolve(output);}).on(data, (data) {output data.toString();}).stderr.on(data, (data) {console.error(错误\n data.toString());});});}).connect(serverOptions);});
}async function main() {try {// 执行远程命令const commandOutput await executeCommand();console.log(命令输出\n, commandOutput);// 使用 SFTP 上传文件await sftp.connect(serverOptions);await sftp.put(./example.zip, /home/cuijiying/example.zip);console.log(文件上传成功);} catch (err) {console.error(操作失败, err);} finally {sftp.end();}
}main();方法三使用 ssh2 的高级特性Shell 模式
如果需要执行多个命令可以使用 Shell 模式。
代码示例
const { Client } require(ssh2);const serverOptions {host: your-server-ip,port: 22,username: your-username,password: your-password,
};const conn new Client();conn.on(ready, () {console.log(SSH 连接成功);conn.shell((err, stream) {if (err) throw err;stream.on(close, () {console.log(Shell 会话结束);conn.end();}).on(data, (data) {console.log(输出\n data.toString());});// 执行多个命令stream.write(pwd\n);stream.write(ls -l\n);stream.write(exit\n);});
}).connect(serverOptions);注意事项 权限问题 确保 SSH 用户具有执行命令的权限。如果是限制用户如 chroot 环境可能无法正常执行某些命令。 命令路径 某些命令可能需要完整路径例如 /usr/bin/ls 而非 ls。 错误处理 捕获所有异常并合理处理连接超时或命令失败等问题。 谨慎使用rm 相关命令 哈哈这是一个极其危险的命令不懂得可以自行搜索。 通过以上方法你可以在 Node.js 环境中使用 ssh2 执行远程命令同时结合 ssh2-sftp-client 进行文件传输满足大多数 SSH 操作需求。