首页 > 解决方案 > NodeJs (A) 通过 SSH 连接到远程服务器 (B) 将 API 请求发送到另一台服务器 (C)

问题描述

在此处输入图像描述

有一个远程服务器 (C),它只允许从服务器 (B) 向其发送 API 调用。我可以通过 ssh 访问服务器 B。

在我的 NodeJS 应用程序中,为了开发和测试,我想通过 SSH 连接到服务器 B(在代码中)并将我的 API 调用发送到服务器 C,就好像它在服务器 B 上运行一样,即使我正在本地机器上开发(一个)。

我以前做过这样的事情:

tunnel = ssh({
          host: '<remote server>',
          port: 22,
          username: 'test',
          privateKey: require('fs').readFileSync('/home/node/app/.ssh/id_rsa'),
          dstHost: '127.0.0.1',
          dstPort: 5000,
          srcHost: '127.0.0.1',
          srcPort: 3030
        }, (e, c)=>{
          if(e) throw e;
          // This gets called everytime a connection happens
        })

但这只会转发端口,我必须在远程服务器上有一个代理。对于这种情况,这没有任何意义。

我发现了这个,但它需要一个 dstPort,这让我感到困惑,因为我只是从 B 向服务器 C 发出 https 请求,并期望得到直接的隧道响应……而不是对特定端口的响应(我确定我误解了某物)。

经典ssh2包很可能是我需要的地方,但我担心我对端口转发的理解可能会让我失望。

这是我尝试过的(除其他外):

let server = tunnel({
                host: '<server B>',
                username: '<my username>',
                port: 22,
                privateKey: signing_key,
                dstHost: '<both server B and server C>',
                dstPort: '443',
            }, async (err, server)=>{
                console.log('No Error', err)
                console.log('This works', server)
                // here I want to send a http request to 
                let response = await <some http request here I've tried both http://localhost and https://<server c>>
                res.json({
                    results: response
                })
            })

标签: node.jsssh

解决方案


推荐阅读