云服务器与内网服务器连通
Vscode SSH使用云服务器访问内网主机
云服务器在配置策略中开放使用到的端口号,比如250和251作为使用。
首先在内网主机上使用ssh-copy-id root@云服务器公网IP,将内网主机的公钥放到服务器上
这一步必须完成,不然下面的命令无法成功建立隧道。
内网中主机使用,建立隧道
autossh -M 251 -fCNR 250:localhost:22 root@云服务器公网IPvscode中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注意两点:
接下来执行:
sudo systemctl enable NanoSshTunnel.servicesudo 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 启用服务
机器A想不输入密码的访问B,需要把机器A的公钥放到机器B的authorized_keys里面