Node.js ssh2库中xserversock和xclientsock对于x11转发的意义

Node.js ssh2库中xserversock和xclientsock对于x11转发的意义,node.js,networking,ssh,x11,x11-forwarding,Node.js,Networking,Ssh,X11,X11 Forwarding,我试图理解SSH连接内的x11端口转发是如何以编程方式工作的 特别是,我试图理解自述文件的这一部分,它是其中代码配方的一部分。一旦客户机被实例化,变量xserversock和xclientsock做什么?为什么xclientsock通过xserversock将数据传输回自身?最后,xserversock实际上是连接到127.0.0.1:6000,还是连接到10.13.23.10:6000 var net = require('net'); var Client = require('ssh2'

我试图理解SSH连接内的x11端口转发是如何以编程方式工作的

特别是,我试图理解自述文件的这一部分,它是其中代码配方的一部分。一旦客户机被实例化,变量
xserversock
xclientsock
做什么?为什么
xclientsock
通过
xserversock
将数据传输回自身?最后,
xserversock
实际上是连接到
127.0.0.1:6000
,还是连接到
10.13.23.10:6000

var net = require('net');

var Client = require('ssh2').Client;

var conn = new Client();

conn.on('x11', function(info, accept, reject) {
  var xserversock = new net.Socket();
  xserversock.on('connect', function() {
    var xclientsock = accept();
    xclientsock.pipe(xserversock).pipe(xclientsock);
  });
  // connects to localhost:0.0
  xserversock.connect(6000, 'localhost');
});

conn.on('ready', function() {
  conn.exec('xeyes', { x11: true }, function(err, stream) {
    if (err) throw err;
    var code = 0;
    stream.on('end', function() {
      if (code !== 0)
        console.log('Do you have X11 forwarding enabled on your SSH server?');
      conn.end();
    }).on('exit', function(exitcode) {
      code = exitcode;
    });
  });
}).connect({
  host: '10.13.23.10',
  username: 'foo',
  password: 'bar'
});
  • xserversock
    是与您计算机上本地运行的X服务器的连接
    xclientsock
    是表示到本地X服务器的传入X客户端请求(例如,本例中的xeyes)的流

  • xclientsock.pipe(xserversock.pipe)(xclientsock)
    不是
    xclientsock
    自身的管道,它只是允许数据在本地X服务器和远程X客户端之间双向流动
    pipe()
    始终返回传递给它的流,以便轻松链接流。这一行代码相当于:

    xclientsock.pipe(xserversock);
    xserversock.pipe(xclientsock);
    
  • 最后,请记住
    xserversock
    是一个连接到本地X服务器的套接字。这在传递给套接字的
    .connect()
    参数中很明显,因此它将连接到127.0.0.1:6000

  • xserversock
    是与您计算机上本地运行的X服务器的连接
    xclientsock
    是表示到本地X服务器的传入X客户端请求(例如,本例中的xeyes)的流

  • xclientsock.pipe(xserversock.pipe)(xclientsock)
    不是
    xclientsock
    自身的管道,它只是允许数据在本地X服务器和远程X客户端之间双向流动
    pipe()
    始终返回传递给它的流,以便轻松链接流。这一行代码相当于:

    xclientsock.pipe(xserversock);
    xserversock.pipe(xclientsock);
    
  • 最后,请记住
    xserversock
    是一个连接到本地X服务器的套接字。这在传递给套接字的
    .connect()
    参数中很明显,因此它将连接到127.0.0.1:6000