node使用ssh2上传本地文件到服务器详细代码
时间: 2024-11-15 10:27:56 浏览: 40
在Node.js中,你可以使用`ssh2`库来创建SSH连接并使用SFTP(安全文件传输协议)功能上传本地文件到服务器。以下是一个详细的步骤及代码示例:
首先,确保已经安装了`ssh2`库,如果没有,可以通过npm安装:
```bash
npm install ssh2
```
然后,编写一个上传文件的函数:
```javascript
const fs = require('fs');
const path = require('path');
const SSH2 = require('ssh2');
const uploadFileToServer = async (host, username, password, localPath, remotePath) => {
let conn;
try {
// 连接到服务器
conn = new SSH2();
await conn.connect({
host,
username,
password,
});
console.log(`Connecting to ${host} as ${username}...`);
// 执行SFTP连接
const sftp = await conn.sftp();
// 检查远程目录是否存在,如果不存在则创建
await sftp.mkdir(remotePath, { recursive: true }, function (err) {
if (err) {
console.error(`Directory not found, creating: ${remotePath}`);
this.mkdir(remotePath, { recursive: true }, function (mkdirErr) {
if (mkdirErr) {
console.error('Failed to create directory:', mkdirErr);
} else {
console.log('Directory created successfully.');
}
});
}
});
// 读取本地文件
const localFileStream = fs.createReadStream(localPath);
// 创建远程文件流
const remoteFileStream = sftp.createWriteStream(remotePath);
// 上传文件
localFileStream.pipe(remoteFileStream)
.on('finish', () => {
console.log(`File uploaded successfully: ${localPath} -> ${remotePath}`);
})
.on('error', error => {
console.error('Error while uploading:', error);
});
} catch (error) {
console.error('Error connecting to server:', error);
if (conn) conn.end();
} finally {
if (conn) conn.end();
}
};
// 使用示例
const host = 'your-server-host';
const username = 'your-username';
const password = 'your-password';
const localPath = '/path/to/local/file.txt';
const remotePath = '/path/to/remote/directory/file.txt';
uploadFileToServer(host, username, password, localPath, remotePath);
```
在这个例子中,你需要替换`host`、`username`和`password`为你实际的服务器信息。这个函数首先连接到服务器,然后创建一个SFTP会话,在远程路径上创建目录(如果不存在),接着读取本地文件并将其写入远程文件。如果遇到任何错误,会在控制台上打印错误信息。
注意:在生产环境中,请使用更安全的方法(例如密钥对)进行身份验证,而不是硬编码密码。
阅读全文