Ubuntu实现SSH外网连接内网(反向隧道)

应用场景:

如果你有Linux云主机(腾讯、华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机;你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamviewer这样的远程控制软件) 的话,本文适合你。

1. 准备 

(1) 一台内网机器 A 

IP: 172.17.60.247

SSH端口: 22

用户名: root

密码: *

内网配置端口:22 (即配置SSH端口的反向隧道) 

(2) 带有公网IP的机器 B 

IP: 121.36.163.25

SSH端口: 22

用户名: root

密码: *

公网端口: 22222(重要, 即用B的22222端口连到A的SSH 22端口) 

2. 配置SSH密钥 

(0)

注意分清A是内网, B是公网 

在A主机上生成SSH秘钥, 再和B用SSH建立认证 

(1) A的配置(内网主机)

ssh-keygen

配置说明:

直接连按3次enter就可以了, 什么都不用输入.

密钥会自动保存在默认的地方, 方便下一步操作.

(你会获得一长串SHA256:......)

然后利用如下命令将A的SSH秘钥即SHA256:......里面的字符串, 添加到B的authorized_keys里面 (需要输入B主机root账号的密码):

  • ssh-copy-id root@121.36.163.25

    配置说明:

    注意换成你自己的IP,执行后会提示输入主机B的密码(要注意这里),

    执行完毕之后,我们登录到B,就发现 ~/.ssh/authorized_keys 里面就多了A的SSH公钥了,成功建立SSH认证.

    这个步骤主要是完成了从机子A到B的ssh的免密登录,具体可以看~/.ssh/下面的一些密钥更改情况

    用root登陆121.36.163.25主机,

  • ls ~/.ssh/

    会有文件

    authorized_keys

    (2) B的配置(公网主机)

  • vim /etc/ssh/sshd_config

    添加

    GatewayPorts yes

    这句话的意思是监听端口可以绑定到任意其他IP, 不然只有本机127.0.0.1可以访问

    重启一下ssdh服务

  • sudo service sshd restart

    3. A的配置(内网主机)(内网主机安装配置反向隧道软件)

    (1)

    弄好了上面的, 再回到A, 安装一个autossh,

    注意, 这个东西ubuntu安装比较方便

    以ubuntu为例, 执行下面命令完成安装

  • sudo apt-get install autossh

    (2) 开启autossh

  • autossh -M 22002 -NfR 0.0.0.0:22222:localhost:22 root@121.36.163.25

    参数说明:

    注意最后一个IP 是公网IP

    这里,

    -M 后面任意填写一个可用端口即可,

    -N 代表只建立连接,不打开shell,

    -f 代表建立成功后在后台运行,

    -R 代表指定端口映射.

    这里是将A主机的22端口映射到B主机的22222端口, 这样就完成了配置. 

    这时我们再访问B主机的22222端口, 就会自动转发到A主机的22端口了, 即可以公网访问了.

    特别提醒:

    如果是一些供应商的云主机,记得要去安全策略组那里开放22002, 22222端口,不然怎么样都是访问不了的.

    4. 连接测试

  • ssh root@121.36.163.25 -p 22222

    输入内网主机a的密码, 这时候你就会惊奇地发现已经打开了内网主机.

    另外, 为了方便, 可以考虑将autossh设置为开机启动.

    5. 将autossh设置为开机启动(Ubuntu)

    (1) 第一步

  • ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

    (2) 第二步

  • sudo echo "[Install]WantedBy=multi-user.targetAlias=rc-local.service" >> /etc/systemd/system/rc-local.service

    (3) 第三步

  • sudo vim /etc/rc.local

  • #!/bin/bashautossh -M 22002 -NfR 0.0.0.0:22222:localhost:22 root@121.36.163.25

    (4) 第四步

  • chmod +x /etc/rc.local

    原文链接:https://mp.weixin.qq.com/s/oJZXXTTcd2FzksrsRewq5w

    本文使用 文章同步助手 同步

  • 最后编辑于
    ©著作权归作者所有,转载或内容合作请联系作者
    平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

    推荐阅读更多精彩内容