[英]SSH2 issues wiht Node.js
我得到了這段代碼,它似乎正在工作,但它沒有。
let REMOTE_SSH_HOST = '190.444.01.75:55554'
let REMOTE_SSH_USERNAME = 'olec'
let REMOTE_SSH_PASSWORD = 'm3uW4jkbaEwVChklFszpbm4'
const Client = require('ssh2-sftp-client');
const sshConfig = {
host: process.env.REMOTE_SSH_HOST,
//port: 22,
username: process.env.REMOTE_SSH_USERNAME,
password: process.env.REMOTE_SSH_PASSWORD,
readyTimeout: 99999,
};
let sftp = new Client();
async function Read(directory) {
console.log('Read(' + directory + ')');
const result = await sftp.list(directory);
for(const sub of result) {
if (sub['type'] === 'd') {
await Read(directory + '/ ' + sub['name']);
}
}
}
async function main(directory) {
try{
const myList = await sftp.list(directory);
}catch(err){console.log(err)}//NEVER forget to catch
finally {
console.log('Closing session...');
await sftp.end();
console.log('Session closed.');
}
}
console.log('Application started');
main('/home/user/path').then(r => {
console.log('Application ended.');
});
我收到以下錯誤消息:
(使用node --trace-warnings...
顯示警告的創建位置)(節點:16240) UnhandledPromiseRejectionWarning:未處理的 promise 拒絕。 此錯誤源於在沒有 catch 塊的情況下拋出異步 function 內部,或拒絕未使用.catch() 處理的 promise。 要終止未處理的 promise 拒絕的節點進程,請使用 CLI 標志--unhandled-rejections=strict
(請參閱https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode )。 (拒絕 ID:5)(節點:16240)[DEP0018] DeprecationWarning:不推薦使用未處理的 promise 拒絕。 將來,未處理的 promise 拒絕將使用非零退出代碼終止 Node.js 進程。
我想你可能需要類似的東西
const sftp = new Client();
await sftp.connect({
host: hostAddress,
username: '...',
privateKey: ...,
});
問題是您正在使用設置了 consts 的環境變量。 (您也將 consts 設置為讓...永遠不要使用讓某些東西永遠不會改變的地方。
const Client = require('ssh2-sftp-client');
const REMOTE_SSH_HOST = '190.444.01.75'
const REMOTE_SSH_PORT = '55554';
const REMOTE_SSH_USERNAME = 'olec'
const REMOTE_SSH_PASSWORD = 'm3uW4jkbaEwVChklFszpbm4'
const sshConfig = {
host: REMOTE_SSH_HOST,
port: REMOTE_SSH_PORT,
username: REMOTE_SSH_USERNAME,
password: REMOTE_SSH_PASSWORD,
readyTimeout: 99999,
};
Thnx 會試試這個並回復你!
您的腳本中存在一系列導致問題的錯誤。 主要問題是您沒有處理async
代碼中的錯誤。 您應該在main
調用中添加一個catch
鏈 function,因為即使您在main
function 中使用try/catch
子句,它也不會考慮在finally
塊中運行的代碼。
另一方面,您的代碼似乎失敗了,因為您在運行sftp.list
之前正在運行sftp.connect
。
有幾個小錯誤可能會導致腳本出現問題:
190.444.01.75
不是有效的 IPv4 地址。env
的環境變量時,您應該提供默認值。Read
function,但我建議您以小寫字母命名函數。const
在Read
function 中聲明for-of
循環的變量。 最好使用let
代替,因為引擎會在每次迭代時更新它。這是一個修改后的腳本示例:
const Client = require('ssh2-sftp-client')
/**
* Global variables
*/
const SSH_CONFIG = {
host : process.env.REMOTE_SSH_HOST || '190.44.1.75:55554',
port : process.env.REMOTE_SSH_PORT || 22,
username : process.env.REMOTE_SSH_USERNAME || 'olec',
password : process.env.REMOTE_SSH_PASSWORD,
readyTimeout: 99999,
}
const ROOT = process.env.ROOT || '/home/user/path'
/**
* Constructors
*/
const sftp = new Client()
/**
* Main
*/
console.log("Application Started!")
main(ROOT)
.then ((response) => console.log(response))
.catch((err) => console.error(err))
/**
* Functions
*/
async function main(directory) {
let myList
try {
await sftp.connect(SSH_CONFIG)
return await sftp.list(directory)
} catch(err) {
console.error(err)
} finally {
console.log('Closing session...')
await sftp.end()
console.log('Session closed.')
}
}
這就是你如何稱呼它:
env REMOTE_SSH_HOST=10.0.0.10 \
env REMOTE_SSH_USERNAME=conatel \
env REMOTE_SSH_PASSWORD=C0n4t3lC0n4t3l \
env REMOTE_SSH_PORT=22 \
env ROOT=/home/conatel \
node ssh.js
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.