Vscode SSH使用云服务器访问内网主机

时间:2024-03-02 13:09:39

Vscode SSH使用云服务器访问内网主机

云服务器在配置策略中开放使用到的端口号,比如250和251作为使用。

首先在内网主机上使用ssh-copy-id root@云服务器公网IP,将内网主机的公钥放到服务器上

这一步必须完成,不然下面的命令无法成功建立隧道。

内网中主机使用,建立隧道

autossh -M 251 -fCNR 250:localhost:22 root@云服务器公网IP

vscode中ssh文件的配置如下:

Host aliyun
    HostName 云服务器公网IP
    User root

Host jetsonNano
    HostName localhost
    User jetson
    Port 250
    ProxyCommand ssh -A -q aliyun -W %h:%p

成功实现:使用aliyun作为跳板机来访问内网主机jetsonNano


设置开机自启动

方式一:rc.local (未验证!!)
linux中使用systemctl enable/diable xxx.service来启用或者禁止某个开机服务。

推荐写一个服务使用systemctl来控制开机执行。

但是还有对System V的兼容实现——rc-local.service

在Ubuntu系统中/etc目录下面已经不存在rc.local文件了。为此我们使用touch 新建一个rc.local文件,文件内容为:

#!/bin/bash
autossh -M 251 -fCNR 250:localhost:22 root@云服务器公网IP
...
等等其他需要执行的脚本

执行chmod a+x rc.local

给rc.local文件增加可执行权限,系统将自动启用rc-local.service

执行systemctl daemon-reload之后

使用systemctl list-dependencies multi-user.target | grep rc可以验证服务每次开机启动之后将会被执行。

方式二:编写service文件 (验证可以!!)

创建/etc/systemd/system/NanoSshTunnel.service 文件,内容为:

[Unit]
Description=ssh tunnel author-shuiyihang
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/bin/autossh -M 251 -fCNR 250:localhost:22 -o ServerAliveInterval=20 -o ServerAliveCountMax=3 root@云服务器IP
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

注意两点:

  1. Service如果没有设置User=用户,则默认使用root,需要提前在/home/root/.ssh目录下生成公钥私钥,并使用ssh-copy-id把公钥放到服务器上。
  2. Type使用forking类型!!,如果为simple,服务运行之后,会产生一个SIGTERM信号把连接关闭,触发设置KillMode=process才行,但是这样做的话使用sudo systemctl stop NanoSshTunnel.service无法结束进程。反而使用forking,可以正常关闭,和正常开机自动打开

接下来执行:
sudo systemctl enable NanoSshTunnel.service
sudo systemctl daemon-reload
想要立马启动,执行
sudo systemctl start NanoSshTunnel.service
否则,下次重新开机也会自动执行

补充:辅助命令查看

systemctl status NanoSshTunnel.service 查看服务运行状态
journalctl -u NanoSshTunnel.service 查看服务日志,前提是使用journal
kill -l 列出所有信号值
systemctl kill -s 15 NanoSshTunnel.service 关闭服务
sudo systemctl start NanoSshTunnel.service启动服务
sudo systemctl stop NanoSshTunnel.service 停止服务
sudo systemctl enable NanoSshTunnel.service 启用服务