# 如何优雅地使用服务器

最近师兄给我分配了一个实验室服务器地账号,自己就琢磨着怎么好好地折腾一下这个服务器,但无奈我的账号没有root权限,安装软件只能通过自己编译的方式完成,并且师兄只分配给我一个端口,我要想运行什么web服务,只能绑定到这一个端口上面,一头雾水之际,突然看到了一个神器:SSH端口转发。

# 什么是SSH端口转发?

让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  • 突破防火墙的限制完成一些之前无法建立的 TCP 连接。

上面是我复制粘贴别人的 (opens new window),总而言之,端口转发就是将所有发送到server_1的m端口的请求转发到server_2的n端口上去,并且两个端口之间的转发,通过SSH加密完成,也就是说,只需要涉密服务器上的一个SSH端口,就可以通过端口转发功能来为我们提供各种各样的服务。

# 如何使用端口转发?

首先要确定你电脑装了ssh,命令行里输一下ssh即可,然后使用下面的命令:

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

举个例子,我服务器的IP地址是123.123.1.123,SSH端口号是88,我在服务器的8888端口上开了一个jupyter-notebook的服务,那么我要想在我的笔记本上使用这个服务,就要将本地的8888端口给映射到服务器的8888端口去,那么我只需要输入命令ssh -L 8888:localhost:8888 username@123.123.1.123 -p 88,然后输入密码,映射就成功了,这时候访问本地的8888端口,就相当于访问服务器的8888端口了。

# 还有其他的吗?

当然有啦,为了全面模拟xshell的使用体验(大雾),当然还需要一个静态文件服务啦,可以用一行代码python -m SimpleHTTPServer 100在100端口开一个静态文件服务,然后用ssh转发100端口,这样就就可以在本地查看服务器的文件了,可以在调参的时候看生成的图片文件,当然了,我的野心不止于此,之后开始跑网络的时候,可以也用来扩展TensorBoard的功能。

除此之外,还有其他的神奇的命令行可以使用,比如终端管理软件tmux,功能上与screen差不过,如果不不了解screen,可以查阅一下,tmux赋予了命令行的窗口化功能,可以分割、调整当前的终端窗口,经过配置之后可以获得非常不错的效果,当然啦,具体的配置还是去网上搜吧,一千人的电脑里有一千个终端配置,程序员还是要有自己的风格才行。