После некоторых исследований staskoverflow, Google и официального Node SSH2 репозитория я все еще не могу создать Node SSH2-сервер, который работает с переадресацией удаленных портов ...
На самом деле я могу сделатьчто я хочу со стандартным демоном SSH на удаленном сервере и этой командой на стороне клиента:
ssh -R 8100:localsite.tld:80 sub.distantserver.com
Весь трафик с sub.distantserver.com:8100 перенаправляется на localsite.tld: 80.(порт 22, традиционный демон SSH).
Моя единственная цель - достичь этого с помощью Node SSH2 Server на порту 21:
ssh -R 8100:localsite.tld:80 foo@sub.distantserver.com -p 21
password: bar
Когда это сработает, я могу сделать несколькопроверьте пользователя и запустите какой-нибудь другой процесс;)
Основываясь на официальном примере проблем с Github, я пытаюсь что-то вроде этого, точно так же, как POC для перехвата потока, но он не работает на forwardIn
, который не существует.
var fs = require('fs');
var crypto = require('crypto');
var inspect = require('util').inspect;
var buffersEqual = require('buffer-equal-constant-time');
var ssh2 = require('ssh2');
var utils = ssh2.utils;
new ssh2.Server({
hostKeys: [fs.readFileSync('/etc/ssh/ssh_host_rsa_key')]
}, function(client) {
console.log('Client connected!');
client.on('authentication', function(ctx) {
if (ctx.method === 'password'
&& ctx.username === 'foo'
&& ctx.password === 'bar')
ctx.accept();
else
ctx.reject();
}).on('ready', function() {
console.log('Client authenticated!');
client.on('session', function(accept, reject) {
var session = accept();
session.once('exec', function(accept, reject, info) {
console.log('Client wants to execute: ' + inspect(info.command));
var stream = accept();
stream.stderr.write('Oh no, the dreaded errors!\n');
stream.write('Just kidding about the errors!\n');
stream.exit(0);
stream.end();
});
});
client.on('request', function(accept, reject, name, info) {
console.log(info);
if (name === 'tcpip-forward') {
accept();
setTimeout(function() {
console.log('Sending incoming tcpip forward');
client.forwardIn(info.bindAddr,
info.bindPort,
function(err, stream) {
if (err)
return;
stream.end('hello world\n');
});
}, 1000);
} else {
reject();
}
});
});
}).listen(21, '0.0.0.0', function() {
console.log('Listening on port ' + this.address().port);
});
Кто-нибудь знает, как добиться простой обычной SSH-пересылки на стороне сервера?
Спасибо!