随时随地 SSH 连接家中电脑

记录一下如何让家里的电脑 / 服务器能够随时被 SSH 远程登陆访问。话说以前本科的实验室 GPU 服务器只能在内网访问,宿舍离实验室又很远,炎炎烈日,我只能动一动手配置反向代理,让我能在凉爽的宿舍里 SSH 到我实验室的服务器上炼丹。

开启 SSH Server

在非服务器版的 Ubuntu 上,默认是没有 SSH 服务器的,因此需要安装和启用 openssh-server

1
2
$ sudo apt update
$ sudo apt install openssh-server

安装好之后默认会启动 SSH Server,可以通过命令查看服务状态,显示 Active 应该就是正常启动了

1
2
3
4
5
6
7
8
$ sudo service ssh status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-06-18 18:15:48 EDT; 1 day 22h ago
 Main PID: 17916 (sshd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/ssh.service
           └─17916 /usr/sbin/sshd -D

还需要在防火墙中允许 SSH 的连接

1
$ sudo ufw allow ssh

之后我们需要知道本机在内网中的 IP 地址

1
$ ip a

我们会看到有几张不同的网卡,找到你使用的网卡下面诸如 inet 192.168.1.27/24 的一串地址,说明子网的地址即为 192.168.1.27

此时,可以测试一下 SSH 服务器是否设置成功了,在另一台连接了同一个路由器的电脑中用 SSH 连接: $ ssh [email protected],不出意外的话已经可以 SSH 进去了。下一步我们需要让它能被其它不在同一网络下的设备访问到。

配置路由器端口转发

如果你的运营商提供了公网 IP,比如 68.175.xxx.xx,那之后的问题就好办了,我们只需要在路由器上配置端口转发(Port Forwarding),这样就能够 $ ssh [email protected] 来访问 Ubuntu 电脑了。

因路由器的不同,需要在路由器中找到端口转发的设置项,将路由器接收到的 TCP / UDP 的 22 端口转发到子网 192.168.1.27 的 22 端口,也就是将 SSH 的连接直接转到 Ubuntu 机器上。示意图如下:

配置好了之后,将另一台电脑连接其它网络(如手机热点),通过 $ ssh [email protected],如果遇到 ssh connection 的错误,可以重启 SSH 服务 $ sudo service ssh restart

配置 frp 反向代理

如果没有公网 IP,或者路由器不支持端口转发,或者像我以前在实验室一样,没有路由器的权限,这时候可以考虑用开源的 frp 配置反向代理。

和之前不一样的是,我们需要一个拥有公网 IP 的云服务器

在服务器端配置 frp 的 server 部分,然后在 Ubuntu 的电脑上配置 frp 的 client 部分,这样就在 Ubuntu 电脑和云服务器之间建立了连接。之后,其它电脑可以通过配置的端口 SSH 访问云服务器,frp 就会将连接转发到 Ubuntu 电脑上的相应端口。详细的配置这里不展开,frp 中文文档 有非常详细的说明。

其它

在 Ubuntu 下,byobu 是非常好用的终端会话管理工具,万一 SSH 断开,你还可以重新连接并恢复之前的会话。

可以参考 How To Install and Use Byobu for Terminal Management on Ubuntu 16.04 的使用介绍。

byobu

加载评论