https://orzyt.cn/posts/ssh-port-forwarding/

SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),远程端口转发(Remote Port Forwarding)以及动态端口转发(Dynamic Port Forwarding)。本文只简单介绍本地端口转发,用于实现本机访问远程服务器上的jupyter notebook、TensorBoard等服务。

什么是本地端口转发?

所谓本地端口转发,就是将发送到本地端口的请求,转发到目标端口。这样,就可以通过访问本地端口,来访问目标端口的服务。

$ ssh -h
unknown option -- h
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

需要用到的命令是ssh -L address user@hostname
其中,address的具体语法为 [bind_address:]port:host:hostport ,即 [本地主机地址:]本地端口:目标地址:目标端口

应用场景 — 以 jupyter notebook 为例

由于服务器上一般是没有安装桌面的,所以像jupyter notebook、TensorBoard等服务是无法直接通过服务器上的浏览器来访问。因此,我们需要采取ssh的本地端口转发方式,从而通过访问本地端口,来访问服务器上目标端口的服务。

首先,在服务器上运行jupyter notebook

会发现有一个黄色的 warning: No web browser found: could not locate runnable browser. (说明服务器上是无法打开的)

然后,我们记下端口号(8008)以及 token(链接中?token=后面一长串的字符,用于登录认证)

接着,执行以下命令进行本地端口转发

# f: 后台执行命令
# N: 不进行实际连接,而仅做端口转发
# 本地主机地址可省略,本地端口号随意填,远程端口号为上述的8008
ssh -fNL 本地端口号:localhost:远程端口号 username@serverAddress

最后,在本机打开地址localhost:本地端口号 输入token后即可访问服务器上的 jupyter notebook

标签:SSH 发布于:2019-10-30 09:26:16