71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
|
// cli.js,创建于根目录,与命令配置的./cli.js保持一致
|
||
|
const path = require("path");
|
||
|
const fs = require('fs');
|
||
|
const { NodeSSH } = require('node-ssh');
|
||
|
|
||
|
sshPublish();
|
||
|
async function sshPublish() {
|
||
|
let privateKeyPath = '';
|
||
|
|
||
|
const publishDir = 'D:/nginx-1.25.1/nginx-1.25.1/html/dist';
|
||
|
let remoteConfig = undefined;
|
||
|
|
||
|
privateKeyPath = '';
|
||
|
remoteConfig = {
|
||
|
host: '139.224.252.239',
|
||
|
username: 'Administrator',
|
||
|
password: 'Jsld.0813',
|
||
|
port: 22,
|
||
|
readyTimeout: 5000000
|
||
|
}
|
||
|
// 初始化ssh
|
||
|
const ssh = new NodeSSH();
|
||
|
// 连接 服务器
|
||
|
|
||
|
await connect(ssh, remoteConfig, privateKeyPath);
|
||
|
console.log('连接成功');
|
||
|
console.log('开始文件上传!');
|
||
|
// 上传目录到服务器
|
||
|
await uploadDir(ssh, '/dist', publishDir);
|
||
|
console.log('文件上传成功!');
|
||
|
// 执行exit命令
|
||
|
|
||
|
const { stdout, stderr, code, signal } = await ssh.execCommand('exit');
|
||
|
ssh.dispose();
|
||
|
}
|
||
|
|
||
|
function connect(ssh, remoteConfig, privateKeyPath) {
|
||
|
return ssh.connect({
|
||
|
host: remoteConfig.host,
|
||
|
username: remoteConfig.username,
|
||
|
password: remoteConfig.password,
|
||
|
port: remoteConfig.port,
|
||
|
tryKeyboard: true,
|
||
|
// privateKey: fs.readFileSync(path.join(__dirname, privateKeyPath)).toString(),
|
||
|
// privateKey: path.join(__dirname, privateKeyPath),
|
||
|
onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => {
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function uploadDir(ssh, localDir, publishDir) {
|
||
|
return ssh.putDirectory(path.join(__dirname, localDir), publishDir, {
|
||
|
recursive: true,
|
||
|
concurrency: 10,
|
||
|
// ^ WARNING: Not all servers support high concurrency
|
||
|
// try a bunch of values and see what works on your server
|
||
|
validate: function (itemPath) {
|
||
|
const baseName = path.basename(itemPath)
|
||
|
return baseName.substr(0, 1) !== '.' && // do not allow dot files
|
||
|
baseName !== 'node_modules' // do not allow node_modules
|
||
|
},
|
||
|
tick: function (localPath, remotePath, error) {
|
||
|
if(error){
|
||
|
console.log(localPath, remotePath, error || '');
|
||
|
} else{
|
||
|
console.log(localPath+':成功上传');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
});
|
||
|
}
|