前言
笔者最近经常
被
加班,因为去加班的同事需要我的提供的服务,而我的服务是直接搭建在自己的笔记本上的。刚好有台闲置的主机没用到,可用来装Linux
伪装成服务器。可是下班后在家服务器出问题了咋办呢?之前电脑是Windows
的时候还能直接用Teamviewer
进行远程操作,Linux
似乎只有黑乎乎的命令行。于是翻山越岭终于找到了解决方案,话不多说,开门见山。
环境
- 内网服务器(10.0.0.128)
服务器A
- VPS(zmcdbp.cn)
服务器B
- MacBook Pro
PC
安装 Autossh (服务器A)
包管理安装
系统 | 命令 |
---|---|
ArchLinux | sudo pacman -S autossh –noconfirm |
Ubuntu/Debian | sudo apt-get install -y autossh |
Mac OS | brew install autossh |
Fedora/CentOS | sudo yum install autossh |
如果你是其他的包管理工具,也可以直接试试看包管理中是否包含
autossh
, 如果没有(比如Fedora 28
)也没关系,我们直接用源码编译就好。
源码编译(需要
GCC
,坑爹的Fedora 28
把GCC
移除了。。)
1 | wget https://www.harding.motd.ca/autossh/autossh-1.4e.tgz |
OK,安装完成,让我们先到 服务器B 上做点设置。
配置 SSH
(服务器B)
使用
SSH
代理需要设置一个配置项,用文本编辑器(Vim、nano等等)打开/etc/ssh/sshd_config
文件并加上下面这行:
1 | GatewayPorts yes |
OK,搞定,让我们回到服务器A上。
##连接服务器A和服务器B
执行以下代码:
1 | autossh -M 0 -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR public-port:localhost:22 remote-username@remote-host |
解释一下主要参数。
参数 | 含义 |
---|---|
public-port | 公网连接服务器A时想要的 SSH 端口,是服务器B上需要开放的端口,切记不要与已有端口重复 |
remote-username | 服务器B上的用户名 |
remote-host | 服务器B的地址 |
others | 其他的配置项是 autossh 的配置项,具体可以看这里 |
执行完上面命令后,到服务器B上看下是否已经连接成功,执行以下命令:
1 | netstat -anltp | grep public-port |
如果看到如下图所示则证明连接上了:
测试从公网连接内网的服务器A
服务器已经连接上了,那么我们开始测试从公网是否可以访问到内网的服务器A,执行以下代码:
1 | ssh local-username@remote-host -p public-port |
这里多了个
local-username
的参数,意思就是使用处在内网的服务器A的用户名,而不是暴露在公网的服务器B。
配置 Autossh
服务
当当当当,很好,已经连接成功了,但是
Ctrl
+C
就断开了,咋办呢?很简单,配置个systemd
服务就可以啦!执行以下命令:
1 | sudo vim /etc/systemd/system/autossh.service |
然后把下面的内容贴进去,记得把相应的参数替换成你自己的:
1 | [Unit] |
保存好文件后,执行以下命令把服务加入开机自启动服务中。
1 | sudo systemctl daemon-reload |
大功告成
享受在家里连接公司内网服务器的快感吧!