我已经安装适用于 Linux 的 Visual C++ 2015。它的作用是,它获取服务器名称、端口号、用户名和密码,然后连接到远程机器,在该机器内部编译 C++ 程序,然后将结果返回到我的本地电脑。
现在,我面临的问题是,我必须通过堡垒主机连接到远程 PC。
假设堡垒服务器的IP地址和端口号分别为yyy.yy.y.20
;8081
远程机器的IP地址为xxx.xxx.x.180
但不知道端口号。
从我的本地 Windows 10 到远程 Linux 机器创建隧道的命令是什么?
ssh -L 22:xxx.xxx.x.180:22 yyy.yy.y.20:8081
上述命令给出了错误信息:
Microsoft Windows [Version 10.0.19045.2846]
(c) Microsoft Corporation. All rights reserved.
C:\Users\pc>ssh -L 22:xxx.xxx.x.180:22 yyy.yy.y.20
C:\Users\pc>ssh -L 22:xxx.xxx.x.180:22 yyy.yy.y.20:8081
ssh: Could not resolve hostname yyy.yy.y.20:8081: No such host is known.
C:\Users\pc>
如何从本地 Windows 10 到远程 Ubuntu 设置 SSH 隧道?
答案1
openssh 客户端不支持该hostname:port
方案。请使用-p
。
ssh -L 22:xxx.xxx.x.180:22 -p 8081 yyy.yy.y.20
答案2
要通过堡垒主机创建从本地 Windows 10 计算机到远程 Ubuntu 计算机的 SSH 隧道,可以使用以下命令:
ssh -L <local_port>:<remote_ip>:<remote_port> <bastion_username>@<bastion_ip> -p <bastion_port> -i <path_to_bastion_private_key>
对于你的情况,命令看起来应该是这样的:
ssh -L 2222:xxx.xxx.x.180:22 [email protected] -p 8081 -i path/to/bastion/private/key
命令中每个参数的含义如下:
-L
:指定本地端口转发。在本例中,我们将本地端口转发2222
到远程 Ubuntu 机器的 SSH 端口(22)
。<local_port>
:您要将流量转发到的本地计算机上的端口号。在本例中,我们使用2222
。<remote_ip>
:您要连接的远程 Ubuntu 机器的 IP 地址。<remote_port>
:远程Ubuntu机器的SSH服务的端口号。<bastion_username>
:用于连接堡垒主机的用户名。<bastion_ip>
:堡垒主机的IP地址。-p
:指定堡垒主机上要连接的端口号。在本例中,我们使用8081
。-i
:指定堡垒机的私钥文件路径。
运行该命令后,系统会提示您输入堡垒主机用户名的密码。输入正确的密码后,隧道将建立,您可以使用 Visual C++ 2015 for Linux 通过隧道使用地址连接到远程 Ubuntu 计算机localhost:2222
。