我目前正在使用标题中列出的技术,并试图提出一个可用的Web sftp解决方案。我遇到了一个障碍,我敢肯定这主要是由于我在竞技场上的愚昧所致,但是在世界范围内,您如何通过护照将用户名和密码传递给ssh2-sftp_client?
如果我只是放入路由文件并在用户登录后调用它,则此方法有效,但是硬编码用户名和密码不是我所理想的。大声笑
let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: '127.0.0.1',
port: '22',
username: 'test',
password: 'Password!1'
}).then(() => {
return sftp.list('/pathname');
}).then((data) => {
console.log(data, 'the data info');
}).catch((err) => {
console.log(err, 'catch error');
});
并且我可以从数据库中提取用户名和密码,但是您知道整个哈希密码都无法解决。
RowDataPacket {
username: 'test',
password:
'$2b$10$Zk4JNqBlEFmDAvtRI/DUjOp0Tmmza
CHKJVVnnmNn3Po.ztB3cZ3ta'
}
我的猜测是,经过护照认证后,它必须位于app.js文件中的某个位置,但我似乎也无法使它正常工作。
passport.use(new LocalStrategy(
function(username, password, done) {
console.log(username);
console.log(password);
const db = require('./db');
db.query('SELECT id,password FROM users WHERE username = ?', [username],
function(err, results, fields){
if(err) { done(err)};
if(results.length === 0)
{
return done(null, false);
} else {
const hash = results[0].password.toString();
bcrypt.compare(password, hash, function(err, response){
if(response === true) {
let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: '127.0.0.1',
port: '22',
username: username,
password: password
}).then(() => {
return sftp.list('/pathname');
}).then((data) => {
console.log(data, 'the data info');
}).catch((err) => {
console.log(err, 'catch error');
});
return done(null, {user_id: results[0].id, files: list});
}
else {
return done(null, false);
}
});
}
});
}));
所以我的问题是,如何从护照中获得可用的密码,将其传递给sftp客户端,并且仍然保持合理的安全级别?