将 sftp 与 socks5 代理一起使用 node.js

Using sftp with socks5 proxy node.js

我一直在考虑使用 ssh2 模块进行日志的 sftp 传输。然而,托管我们应用程序的云服务使用了一个旋转的 IP 地址范围。所以想集成给我们静态 ip 地址的 socks5 代理服务。我正在使用 socksjs 模块来建立 socks5 连接,我正在连接到代理,但我认为我已经注入了 sftp 使用错误的套接字连接。

干杯,

尼克

var sockConn = new SocksConnection(connTargetSettings, connProxySettings);
connTargetSettings.sock = sockConn.outSocket;

var conn = new ssh2.Client();
conn.on("ready", function() {
    conn.sftp(function(err, sftp) {
        if (err) throw err;
        // you'll be able to use sftp here
        sftp.readdir("/", function(err, list) {
            if (err) throw err;
            // List the directory in the console
            console.dir(list);
            // Do not forget to close the connection, otherwise you'll get troubles
            conn.end();
        });
        // Use sftp to execute tasks like .unlink or chmod etc
    });
}).connect(connTargetSettings);

您可以使用 socksv5 库(来自 ssh2 的创建者)来连接 throw socks5 代理。

示例:

var socks = require('socksv5'),
    SSHClient = require('ssh2').Client;

socks.connect({
  host: 'ssh.example.org', // destination
  port: 22,
  proxyHost: '127.0.0.1',
  proxyPort: 1080,
  auths: [ socks.auth.None() ]
}, function(socket) {
  var conn = new SSHClient();
  conn.on('ready', function() {
    conn.exec('uptime', function(err, stream) {
      if (err) throw err;
      stream.on('close', function(code, signal) {
      conn.end();
      }).on('data', function(data) {
        console.log('STDOUT: ' + data);
      }).stderr.on('data', function(data) {
        console.log('STDERR: ' + data);
      });
    });
  }).connect({
    sock: socket,
    username: 'frylock',
    privateKey: require('fs').readFileSync('/here/is/my/key')
  });
});