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

news/2024/2/28 0:57:56

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

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

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

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

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

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

vscode中ssh文件的配置如下:

Host aliyunHostName 云服务器公网IPUser rootHost jetsonNanoHostName localhostUser jetsonPort 250ProxyCommand 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 启用服务


http://www.ppmy.cn/news/1350011.html

相关文章

精读《js 模块化发展》

1 引言 如今,Javascript 模块化规范非常方便、自然,但这个新规范仅执行了 2 年,就在 4 年前,js 的模块化还停留在运行时支持,10 年前,通过后端模版定义、注释定义模块依赖。对经历过来的人来说,…

Hadoop:认识MapReduce

MapReduce是一个用于处理大数据集的编程模型和算法框架。其优势在于能够处理大量的数据,通过并行化来加速计算过程。它适用于那些可以分解为多个独立子任务的计算密集型作业,如文本处理、数据分析和大规模数据集的聚合等。然而,MapReduce也有…

从零开始实现消息队列(二)

从零开始实现消息队列 .核心API交换机类型持久化网络通信Connection和Channel 消息应答模块划分 . 核心API 对于Broker来说,要实现以下核心API,通过这些API来实现消息队列的基本功能. 创建队列(queueDeclare)销毁队列(queueDelete)创建交换机(exchangeDeclare)销毁交换机(exc…

QT学习文件操作类 QFile

(一)QFile QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能,支持文本和二进制文件。QFile 继承自 QIODevice ,因此它可以像其他 IO 设备一样使用。 (1)主要功能 1. 文件读写…

学习记录691@spring面试之bean的作用域

Spring为Bean定义了5种作用域,分别为Singleton(单例)、Prototype(原型)、Request(请求级别)、Session(会话级别)和Global Session(全局会话)。 S…

mysql、mybatis中SORT

SORT排序 根据数据表sys_series中HOT(int类型)进行升序排列: 原来的数据库中存储: 排序 # 结果是HOT字段为null的所有数据都排在最前面,不为null的数据按升序排列 SELECT * FROM sys_series ORDER BY HOT;# 结果是H…

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D , 任务 :宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel, 命名为PlayerInfo 新建Image,作为头像 新建Slider,作为血条 对Panel组件添加一个水…

python从入门到精通(二十):python的exe程序打包制作

python的exe程序打包制作 python打包的概念python打包的模块导入模块安装验证基本语法命令参数文件夹模式单文件模式资源嵌入exe更改图标启动画面(闪屏)禁用异常提示 python打包的概念 将普通的*.py程序文件打包成exe文件。exe文件即可执行文件&#xf…

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险 The Java Adventure Chronicles of Lin Haoran and Yang Lingyun: Garbage Collection Odyssey 在一个充满0和1代码森林的世界里,住着两位勇敢的程序员侠侣——林浩然和杨凌云。林浩然是个身怀Java绝技的…

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情,而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群,这样才能让你们的公司想盈利就盈利,想战略就战略,想融资就融资。 一般从事运营的人有着强大的自信心,后台数据分析…

Ainx-V0.2-简单的连接封装与业务绑定

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于Ainx系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系列…

爬爬今天爬小说————爬虫练习

爬不同的的小说,会有略微的改动。 我今天这个是从一章的提前到全部的提前。 在我们电脑里面了,想怎么看就怎么看。 代码代码: import re import requestsheaders {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x6…

Java图形化界面编程——弹球游戏 笔记

Java也可用于开发一些动画。所谓动画,就是间隔一定的时间(通常小于0 . 1秒 )重新绘制新的图像,两次绘制的图像之间差异较小,肉眼看起来就成了所谓的动画 。 ​ 为了实现间隔一定的时间就重新调用组件的 repaint()方法,可以借助于…

【每日一题】牛客网——链表分割

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

设计模式-状态模式 State

状态模式 一、简介概述二、有限状态机1、分支法2、查表法3、状态模式 三、重点回顾 一、简介概述 状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。 状态设计模式是一种行为型设计模式,它允许对象在其内部状态发生变化…

【Kubernetes】kubectl top pod 异常?

目录 前言一、表象二、解决方法1、导入镜像包2、编辑yaml文件3、解决问题 三、优化改造1.修改配置文件2.检查api-server服务是否正常3.测试验证 总结 前言 各位老铁大家好,好久不见,卑微涛目前从事kubernetes相关容器工作,感兴趣的小伙伴相互…

Tdesign 常用知识

Mock数据中的常见随机数: mock 数据中, 开头的是 Mock.js 的语法。Mock.js 是一个用于生成随机数据的库,它提供了一些特殊的语法,可以方便地生成各种类型的随机数据。 在这个 mock 数据中,使用了以下语法&#xff1a…

blender怎么保存窗口布局,怎么设置默认输出文件夹

进行窗口布局大家都会,按照自己喜好来就行了,设置输出文件夹如图 这些其实都简单。关键问题在于,自己调好了窗口布局,或者设置好了输出文件夹之后,怎么能让blender下次启动的时候呈现出自己设置好的窗口布局&#xff…

【doghead】uv_loop_t的创建及线程执行

worker测试程序,类似mediasoup对uv的使用,是one loop per thread 。创建一个UVLoop 就可以创建一个uv_loop_t Transport 创建一个: 试验配置创建一个: UvLoop 封装了libuv的uv_loop_t ,作为共享指针提供 对uv_loop_t 创建并初始化

中科大计网学习记录笔记(九):DNS

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…
最新文章