Я пытаюсь передать файлы с одного сервера на другой, используя SSH2 в NodeJS. Однако наши сетевые администраторы настроили закрытые ключи для авторизованного пользователя и, по сути, просто сделали возможным подключение к другому серверу через командную строку, например... $ 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');
});
/////////
ssh -vvv user@server2
, вы должны увидеть в выводе отладки, какая аутентификация используется, и если она основана на ключе, откуда извлекается ключ. - person mscdex   schedule 04.09.2019