通过堡垒机的 SSH 隧道和端口转发会导致连接被拒绝错误

SSH tunnel and port forwarding through a bastion machine gives connection refused error

我在服务器机器上安装了 jupyter notebook 运行,我可以通过堡垒机 ssh 进入。我想在我的本地机器上访问笔记本。

这是我在服务器机器上 运行 jupyter 之后尝试的:

ssh -f -N -L local_machine_port:server_machine_IP:server_machine_port_hosting_jupyter username@bastion_machine_ip

每当我尝试访问 http://localhost:local_machine_porthttp://127.0.0.1:local_machine_port 我得到

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Connection to port 7001 forwarding to <server ip> port <server port> requested.
debug1: channel 2: new [direct-tcpip]
debug1: Connection to port 7001 forwarding to <server ip> port <server port> requested.
debug1: channel 3: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7001 for <server ip> port <server port>, connect from 127.0.0.1 port 43276 to 127.0.0.1 port 7001, nchannels 4
channel 3: open failed: connect failed: Connection refused
debug1: channel 3: free: direct-tcpip: listening port 7001 for <server ip> port <server port>, connect from 127.0.0.1 port 43278 to 127.0.0.1 port 7001, nchannels 3
debug1: Connection to port 7001 forwarding to 192.168.2.38 port 6006 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7001 for <server ip> port <server port>, connect from 127.0.0.1 port 43280 to 127.0.0.1 port 7001, nchannels 3

我该怎么办?

尝试将 --ip 0.0.0.0 选项添加到 jupyter notebook 命令

您可以按照下列步骤操作:

 1. Run ssh on local machine:
     ssh -L local_machine_port:server_machine_IP:server_machine_port_hosting_jupyter username@bastion_machine_ip
 2. Run jupyter notebook on remote server:
     jupyter notebook --ip 0.0.0.0 --port server_machine_port_hosting_jupyter  
 3. Open browser on localmachine:
     http://localhost:local_machine_port

编辑

抱歉,我才刚刚意识到您正在使用 ssh 连接到堡垒机而不是远程服务器 运行 jupyter。

在那种情况下,您可能首先需要使用堡垒机与远程服务器建立 ssh 连接,请参阅 this answer on how to do that

原回答

您是否将命令中的 server_machine_IP 替换为机器的外部 IP 地址?即类似

ssh -f -N -L 7001:10.45.12.34:7001 username@bastion_machine_ip

如果是这样,这会将您的本地端口转发到远程服务器其外部 IP 地址 上的指定端口。但是,如果该主机上的 jupyter 未侦听该 IP - 而仅侦听本地主机 - 连接将被拒绝。

如果 jupyter 只监听本地连接,您可以尝试 让 jupyter 监听外部 IP。或者尝试以下

ssh -f -N -L 7001:localhost:7001 username@bastion_machine_ip

并在本地计算机上打开 http://localhost:local_machine_port:这将从本地计算机上的端口转发到 localhost 远程计算机上的端口 ,即对于远程主机上的 jupyter,这看起来像是来自本地机器(即远程服务器)的连接。