node.js - 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
})
})
解决方案
推荐阅读
- java - Spring MVC - 如何使用不同的映射注释调用相同的 URL
- typescript - 一行打字稿语法如何工作
- javascript - 当值在两个不同的函数上时计算总计
- php - 404 - 找不到文件或目录。Windows 服务器上的 Codeigniter
- html - 允许不同货币和地区的本地化货币输入
- python - 使用正则表达式从推文中提取主题标签的更快方法
- django - 如何为 Django 频道中的所有聊天处理单个 websocket 连接
- ios - System.Net.WebException:发生 SSL 错误,无法与服务器建立安全连接
- c++ - 提升输入流错误。如何将 std:vectors 的动态向量保存为 xml 文件
- javascript - 如何通过单击我的组件来更改减速器中的状态?