基于autossh技术的内网穿透(借助阿里云公网机)

阿里云ECS内网机A内网机B
公网IP: 47.99.xxx.xxxIP: 202.38.xxx.xxxIP:222.195.xxx.xxx
用户名: aaa/aaa用户名: bbb/bbb用户名:ccc/ccc
ubuntu18ubuntu18win10
  1. 需要在阿里云ECS上开发一些端口

    ''网络与安全组“->"安全组配置"->"选择实例"->"配置规则", 需要开放入方向和出方向的端口,本次开放了2333-2433之间的全部端口.

    在“安全组规则” -》 “访问规则”里在入方向和出方向里同时增加TCP和UDP协议的开发端口2333/2433.

    网络类型授权方向授权策略IP协议端口范围优先级源IP地址段源IPv6地址段源安全组源端安全组名称源安全组所属阿里云账户ID源端端口范围目标IP地址段
    intranetingressAcceptUDP2333/243310.0.0.0/0      
    intranetingressAcceptTCP2333/243310.0.0.0/0      
    intranetingressAcceptTCP3389/33891000.0.0.0/0      
    intranetingressAcceptTCP22/221000.0.0.0/0      
    intranetingressAcceptICMP11000.0.0.0/0    1 
    intranetegressAcceptUDP2333/24331      0.0.0.0/0
    intranetegressAcceptTCP2333/24331      0.0.0.0/0
                 

    修改阿里云ECS上SSH配置文件 /etc/ssh/sshd_config 将"GatewayPorts Yes"设为yes。 service ssh restart

  2. 将内网机A和内网机B的ssh公钥上传到阿里云ECS上:

 # 在内网机A上执行下面命令
 $ ssh-keygen
 $ ssh-copy-id root@47.99.xxx.xxx
 ​
 $ sudo apt install autossh
  1. 设置内网机A的反向代理

     $ autossh -M 12345 -fgnvNTR 47.99.xxx.xxx:2333:localhost:22 aaa@47.99.xxx.xxx -o ServerAliveInterval=1
  2. 在内网机B上远程连接内网机A

    1.  $ ssh bbb@47.99.xxx.xxx -p 2333
       ​
       注意:此时的user是内网机A的用户名,因此待会输入的密码是user的密码. IP是公网机的IP。
       登录成功后在阿里云ECS上执行lsof -i:2333 可以看到如下信息:
       root@iZbp15flh0q5ay0cugwahlZ:~# lsof -i :2333
       COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
       sshd    1358 root    9u  IPv4  28364      0t0  TCP *:2333 (LISTEN)
       sshd    1358 root   10u  IPv4  29393      0t0  TCP iZbp15flh0q5ay0cugwahlZ:2333->222.195.xxx.xxx:38434 (ESTABLISHED)
  3. 设置内网机A的autossh自启动

    sudo vim /etc/systemd/system/autossh.service
     编写如下信息:
     ​
     [Unit]
     Description=autossh
     After=network-online.target
     ​
     [Service]
     ​
     Environment="AUTOSSH_GATETIME=0"
     User=userA
     WorkingDirectory=/home/userA
     ExecStart=/usr/bin/autossh -M 12345 -gnvNTR 47.99.xxx.xxx:2333:localhost:22 aaa@47.99.xxx.xxx -o ServerAliveInterval=1
     ​
     [Install]
     WantedBy=multi-user.target

    注意: 参数为-gnvNTR而不是-fgnvNTR,因为在systemctl中不支持f参数,不要复制粘贴错了,会无法运行的

     sudo systemctl daemon-reload
     sudo systemctl start autossh.service
     sudo systemctl enable autossh.service
     ​
     sudo systemctl status autossh

 

 

 

参考链接:

Ubuntu 阿里云 ssh反向代理 内网穿透 autossh自启动

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现autossh的自启动,你可以按照以下步骤进行操作: 1. 创建一个启动脚本:首先,你需要创建一个启动脚本,以便在系统启动时运行autossh。你可以使用任何文本编辑器来创建一个新的脚本文件,比如autossh_start.sh。 2. 编辑启动脚本:在启动脚本中,你需要指定autossh的命令和参数。例如,如果你要使用autossh来建立一个SSH隧道连接,可以在启动脚本中添加以下内容: ```bash #!/bin/bash autossh -M 0 -f -N -L <本地端口>:<目标主>:<目标端口> <SSH用户名>@<目标主IP> ``` 请将 `<本地端口>`, `<目标主>`, `<目标端口>`, `<SSH用户名>` 和 `<目标主IP>` 替换为实际的值。 3. 保存并退出:完成编辑后,请保存并退出启动脚本。 4. 设置脚本权限:运行以下命令,以确保启动脚本具有执行权限: ```bash chmod +x autossh_start.sh ``` 5. 将脚本添加到启动项:将启动脚本添加到系统的启动项中,以便在系统启动时自动运行。具体的操作方式可能因操作系统而异。 - 对于基于 systemd 的系统(如Ubuntu 16.04+),你可以创建一个名为 `autossh.service` 的服务单元文件,并将其放置在 `/etc/systemd/system/` 目录下。在文件中添加以下内容: ``` [Unit] Description=Autossh Service After=network.target [Service] ExecStart=/path/to/autossh_start.sh [Install] WantedBy=default.target ``` 请将 `/path/to/autossh_start.sh` 替换为实际的启动脚本路径。 然后,运行以下命令以重新加载 systemd 配置并启用服务: ```bash sudo systemctl daemon-reload sudo systemctl enable autossh.service ``` - 对于其他系统(如 CentOS、Red Hat、Debian 等),你可以将启动脚本的符号链接添加到 `/etc/rc.d/rc.local` 文件中。运行以下命令将启动脚本添加到 `rc.local` 文件中: ```bash sudo ln -s /path/to/autossh_start.sh /etc/rc.d/rc.local ``` 请将 `/path/to/autossh_start.sh` 替换为实际的启动脚本路径。 6. 重新启动系统:完成上述步骤后,重新启动系统,autossh应该会在系统启动时自动运行。 这样,autossh就会在系统启动时自动建立 SSH 隧道连接。记得根据你的实际需求和配置进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值