① 使用ssh访问防火墙后的Linux服务器的方法
使用ssh工具访问Linux服务器的基本方法
第一步,开启工作站上防火墙的相应端口,SSH是22。
第二步,开启SSH服务。
先查看ssh的状态。
第三步,修改配置文件,/etc/ssh/sshd_config
打开这个文件,在最后的地方AllowUsers,添加用户名,多个就用空格隔开,当然也可以添加root。如果想禁用root 登录也可以,这里不添加。同时可以在这个文件中找到一个语句: Permitrootlogin yes。将yes改为no就可以了。
第四步,设置ssh随机启动
第五步,远程登录
通过反向 SSH 隧道访问 NAT 后面的 Linux 服务器
什么是反向 SSH 隧道?
SSH 端口转发的一种替代方案是 反向 SSH 隧道。反向 SSH 隧道的概念非常简单。使用这种方案,在你的受限的家庭网络之外你需要另一台主机(所谓的“中继主机”),你能从当前所在地通过 SSH 登录到它。你可以用有公网 IP 地址的 VPS 实例 配置一个中继主机。然后要做的就是从你的家庭网络服务器中建立一个到公网中继主机的永久 SSH 隧道。有了这个隧道,你就可以从中继主机中连接“回”家庭服务器(这就是为什么称之为 “反向” 隧道)。不管你在哪里、你的家庭网络中的 NAT 或 防火墙限制多么严格,只要你可以访问中继主机,你就可以连接到家庭服务器。
在 Linux 上设置反向 SSH 隧道
让我们来看看怎样创建和使用反向 SSH 隧道。我们做如下假设:我们会设置一个从家庭服务器(homeserver)到中继服务器(relayserver)的反向 SSH 隧道,然后我们可以通过中继服务器从客户端计算机(clientcomputer) SSH 登录到家庭服务器。本例中的中继服务器 的公网 IP 地址是 1.1.1.1。
在家庭服务器上,按照以下方式打开一个到中继服务器的 SSH 连接。
复制代码代码如下:homeserver~$ ssh -fN -R 10022:localhost:22 [email protected]“-R 10022:localhost:22” 选项定义了一个反向隧道。它转发中继服务器 10022 端口的流量到家庭服务器的 22 号端口。
用 “-fN” 选项,当你成功通过 SSH 服务器验证时 SSH 会进入后台运行。当你不想在远程 SSH 服务器执行任何命令,就像我们的例子中只想转发端口的时候非常有用。
运行上面的命令之后,你就会回到家庭主机的命令行提示框中。
登录到中继服务器,确认其 127.0.0.1:10022 绑定到了 sshd。如果是的话就表示已经正确设置了反向隧道。
复制代码代码如下:relayserver~$ sudo netstat -nap | grep 10022通过反向SSH 隧道直接连接到网络地址变换后的服务器
上面的方法允许你访问 NAT 后面的 家庭服务器,但你需要登录两次:首先登录到 中继服务器,然后再登录到家庭服务器。这是因为中继服务器上 SSH 隧道的端点绑定到了回环地址(127.0.0.1)。
事实上,有一种方法可以只需要登录到中继服务器就能直接访问NAT之后的家庭服务器。要做到这点,你需要让中继服务器上的 sshd 不仅转发回环地址上的端口,还要转发外部主机的端口。这通过指定中继服务器上运行的 sshd 的 GatewayPorts 实现。
打开中继服务器的 /etc/ssh/sshd_conf 并添加下面的行。
基于 Debian 的系统:
复制代码代码如下:relayserver~$ sudo /etc/init.d/ssh restart现在在任何其它计算机(客户端计算机),输入以下命令访问网络地址变换之后的家庭服务器。
在 Linux 上设置一个永久反向 SSH 隧道
现在你已经明白了怎样创建一个反向 SSH 隧道,然后把隧道设置为 “永久”,这样隧道启动后就会一直运行(不管临时的网络拥塞、SSH 超时、中继主机重启,等等)。毕竟,如果隧道不是一直有效,你就不能可靠的登录到你的家庭服务器。
对于永久隧道,我打算使用一个叫 autossh 的工具。正如名字暗示的,这个程序可以让你的 SSH 会话无论因为什么原因中断都会自动重连。因此对于保持一个反向 SSH 隧道非常有用。
第一步,我们要设置从家庭服务器到中继服务器的无密码 SSH 登录。这样的话,autossh 可以不需要用户干预就能重启一个损坏的反向 SSH 隧道。
下一步,在建立隧道的家庭服务器上安装 autossh。
在家庭服务器上,用下面的参数运行 autossh 来创建一个连接到中继服务器的永久 SSH 隧道。
“-fN” 选项传递给 ssh 命令,让 SSH 隧道在后台运行。
“-o XXXX” 选项让 ssh:
使用密钥验证,而不是密码验证。
自动接受(未知)SSH 主机密钥。
每 60 秒交换 keep-alive 消息。
没有收到任何响应时最多发送 3 条 keep-alive 消息。
其余 SSH 隧道相关的选项和之前介绍的一样。
如果你想系统启动时自动运行 SSH 隧道,你可以将上面的 autossh 命令添加到 /etc/rc.local。
② 如何区分GPU服务器和普通服务器
GPU服务器是基于GPU的应用视频编解码、深度学习、海量运算等多种场景的快速、稳定的计算服务。GPU加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载到GPU,同时仍由CPU运行其余程序代码。普通服务器在这些方面的应用上可能会稍微差点。其实你也可以去网上对比看看,去官网找几个具体的型号做一下对比。思腾合力在业界的口碑还是不错的,拥有覆盖全场景的需求的GPU服务器产品线,拥有自主品牌GPU服务器以及通用X86服务器,还是挺不错的。
③ 通过 X11 在你的 Windows 上显示 Linux 服务器里的 GUI 程序
平时进行实验操作时,通过 VSCode 远程连接服务器,所有代码、环境、运行环境都在服务器上。然而,有时需要使用 GUI 程序,比如使用 Matplotlib 或 OpenCV 进行中间过程绘图。尽管可以寻找替代方案,但最理想的解决方法是在个人电脑上直接显示服务器上的 GUI 程序。
若采用 Scoop,MobaXterm 可以直接在电脑上弹出窗口显示结果。这是因为 X11 是 Linux 系统上的一种采用 Client-Server 架构的图形界面协议。通常,服务器上的客户端与 Windows 上的服务器端结合使用。以实现 GUI 程序在 Windows 系统上的显示。
想象您作为 X11 开发人员,需要实现的功能是:客户端显示需要显示的区域,实际运行 GUI 程序的区域安装客户端。SSH 作为端口转发工具,即 X11Forwarding 的用途。Linux 系统中的桌面环境(如 GNOME、KDE)通常在本地安装客户端和服务器端,满足显示需求。
Windows 系统上,使用了如 Xming X Server for Windows 和 VcXsrv Windows X Server 等工具,但通常需要手动配置。相比之下,MobaXterm 自带的 X11 服务器能自动配置,方便使用。
通过 X11 在 Windows 系统上运行 Linux 服务器上的 GUI 程序,看起来似乎可行。然而,这种方式可能不如使用 VSCode 的远程开发功能体验佳。JetBrains 的 Gateway 实际上就是通过类似方法运作,尽管其当前体验可能仍逊于 VSCode。
参考资料:Difference between Xorg and Gnome/KDE/Xfce