长途访问没有公网IP的服务器

打印 上一主题 下一主题

主题 781|帖子 781|积分 2343

言简意赅的讲解SSH解决的痛点

在童鞋们讲解Docker之后,大家碰到了各种题目。互相帮忙的时间发现很多童鞋没有公网IP不能被长途,这时间交流起来犯了难。那本文给大家提供一些解决思绪,在现实开发中,很多个人开发者和小型团队会面临这样的挑战:某些服务器没有公网IP,导致无法直接通过SSH进行长途访问。这时,我们可以借助一台拥有公网IP的服务器来解决这个题目。这篇文章将为你具体讲解怎样通过反向代理技能,使用SSH命令来毗连没有公网IP的服务器,同时我们还将探究一些SSH的常见用法及一些冷门技巧。
背景介绍

偶然我们需要访问位于内网中的服务器,这些服务器没有公网IP,无法通过传统的SSH直接访问。我们可以通过一台拥有公网IP的服务器,使用反向SSH隧道技能将没有公网IP的服务器毗连到公网IP服务器上,然后通过公网IP服务器作为跳板机,访问内网服务器。
假设你有以下两台服务器:


  • 公网IP服务器:拥有公网IP的服务器,可以直接访问。
  • 目标服务器:没有公网IP的服务器,位于内网。
我们将通过反向SSH隧道,让目标服务器与公网IP服务器建立毗连,并用公网IP服务器作为跳板机毗连目标服务器。
解决方案:使用SSH反向隧道 (ssh -R)

SSH反向隧道是一种通过长途服务器反向建立隧道的方式。使用ssh -R命令,你可以让目标服务器(没有公网IP的服务器)毗连到公网IP服务器,并将目标服务器的端口映射到公网IP服务器上,从而实现长途访问。
步调1:在没有公网IP的目标服务器上创建反向隧道

假设你在目标服务器上实行以下命令:
  1. ssh -R 2222:localhost:22 user@公网IP服务器
复制代码
这条命令的含义如下:


  • -R 2222:localhost:22:表示将目标服务器的22端口(SSH端口)映射到公网IP服务器的2222端口。通过公网IP服务器的2222端口,可以访问目标服务器的SSH服务。
  • user@公网IP服务器:你需要使用你在公网IP服务器上的用户名和IP地址进行毗连。
实行该命令后,目标服务器的SSH服务就通过公网IP服务器的2222端口暴暴露来了。
步调2:从当地装备毗连到公网IP服务器

如今,在你的当地装备上,你可以通过以下命令毗连到公网IP服务器的2222端口:
  1. ssh -p 2222 user@公网IP服务器
复制代码
这条命令会将你毗连到公网IP服务器上的2222端口,该端口现实上是指向目标服务器的SSH服务的,以是user应该是目标服务器的。
步调3:通过公网IP服务器访问目标服务器

一旦你成功毗连到公网IP服务器,你就可以直接通过该服务器访问没有公网IP的目标服务器。可以像使用平凡SSH毗连一样,在公网IP服务器上实行操纵,操纵现实上会影响目标服务器。
常见的SSH用法

除了反向隧道,SSH还提供了许多强大的功能,帮助开发者更高效地管理和访问长途服务器。以下是一些常见的SSH用法:
1. SSH端口转发(Port Forwarding)

除了反向隧道,你还可以使用SSH端口转发(forwarding)来转发端口。常见的方式有当地端口转发和长途端口转发。


  • 当地端口转发:将当地机器的端口映射到长途服务器的端口。
    1. ssh -L 8080:localhost:80 user@remote_server
    复制代码
    这条命令将你当地的8080端口映射到长途服务器remote_server的80端口。
  • 长途端口转发:将长途机器的端口映射到当地机器的端口。
    1. ssh -R 9090:localhost:3000 user@remote_server
    复制代码
    这条命令将长途服务器remote_server的9090端口映射到当地机器的3000端口。
2. SSH密钥认证(Key-based Authentication)

为了提高安全性,SSH支持使用密钥对进行认证,而不是依靠密码登录。首先,你需要在当地机器生成一对SSH密钥:
  1. ssh-keygen -t rsa
复制代码
然后将公钥上传到长途服务器的~/.ssh/authorized_keys文件中:
  1. ssh-copy-id user@remote_server
复制代码
这样,以后你就可以使用密钥而不是密码来登录长途服务器。
3. SSH代理转发(SSH Agent Forwarding)

如果你需要在长途服务器上使用当地机器的SSH密钥,可以使用SSH代理转发。首先,在当地启动SSH代理:
  1. eval $(ssh-agent)
复制代码
然后将你的密钥添加到SSH代理中:
  1. ssh-add ~/.ssh/id_rsa
复制代码
接着,当你通过SSH登录到长途服务器时,使用-A选项启用代理转发:
  1. ssh -A user@remote_server
复制代码
这样,你在长途服务器上的操纵将可以或许使用当地机器的SSH密钥。
4. SSH的ControlMaster和ControlPersist选项

如果你需要频繁毗连到同一台长途服务器,可以使用ControlMaster和ControlPersist选项来复用SSH毗连,从而加速毗连过程。
在~/.ssh/config文件中添加以下设置:
  1. Host remote_server
  2.   ControlMaster auto
  3.   ControlPersist 10m
复制代码
这将答应SSH复用毗连,保持毗连一连10分钟,减少每次毗连的开销。
冷门用法:SSH代理隧道

在某些情况下,你可能希望通过SSH建立一个完备的代理隧道,来访问受限的网络资源。使用SSH代理隧道可以将你的网络流量通过SSH通道进行加密传输,绕过防火墙等网络限制。
假设你希望通过SSH隧道访问长途服务器的HTTP服务,可以使用如下命令:
  1. ssh -D 8080 user@remote_server
复制代码
这将创建一个SOCKS代理,所有通过当地8080端口的请求都会通过SSH隧道转发。
总结

通过SSH的反向隧道功能,个人开发者可以轻松地通过公网IP服务器长途访问没有公网IP的内网服务器。这种方式不仅解决了没有公网IP服务器的访问题目,还能扩展为多种SSH常见用法,如端口转发、密钥认证、代理转发等,帮助开发者提高工作服从。

通过上述内容,你就已经基本明白了这个方法,底子用法我也都有展示。如果你能融会贯通,我相信你会很强
Best
Wenhao (楠博万)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表