我正在尝试使用 NodeJS 中的 SSH2 将文件从一台服务器传输到另一台服务器。但是,我们的网络管理员已经为授权用户设置了私钥,并且基本上可以通过命令行连接到其他服务器,就像这样...... $ ssh user@server2 我可以在不输入密码的情况下连接。我知道身份验证是在 known_hosts 中预定义的,但我正试图让它在 nodejs 中工作。
SSH2 配置中似乎需要 privateKey 或密码。有人知道这样的解决方法吗?还是我只是做错了什么?我能找到的唯一键是在 known_hosts 文件中,但它的格式似乎不正确。
这就是我正在使用的...
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.exec('uptime', function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
//// Another Option I've tried /////////////////////////////////////////
let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: 'server2',
port: '22',
username: 'username',
}).then(() => {
return sftp.list('/pathname');
}).then(data => {
console.log(data, 'the data info');
}).catch(err => {
console.log(err, 'catch error');
});
/////////