// 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+':成功上传'); } } }); }