云计算百科
云计算领域专业知识百科平台

远程访问没有公网IP的服务器

言简意赅的讲解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的目标服务器上创建反向隧道

假设你在目标服务器上执行以下命令:

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端口:

ssh -p 2222 user@公网IP服务器

这条命令会将你连接到公网IP服务器上的2222端口,该端口实际上是指向目标服务器的SSH服务的,所以user应该是目标服务器的。

步骤3:通过公网IP服务器访问目标服务器

一旦你成功连接到公网IP服务器,你就可以直接通过该服务器访问没有公网IP的目标服务器。可以像使用普通SSH连接一样,在公网IP服务器上执行操作,操作实际上会影响目标服务器。

常见的SSH用法

除了反向隧道,SSH还提供了许多强大的功能,帮助开发者更高效地管理和访问远程服务器。以下是一些常见的SSH用法:

1. SSH端口转发(Port Forwarding)

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

  • 本地端口转发:将本地机器的端口映射到远程服务器的端口。

    ssh -L 8080:localhost:80 user@remote_server

    这条命令将你本地的8080端口映射到远程服务器remote_server的80端口。

  • 远程端口转发:将远程机器的端口映射到本地机器的端口。

    ssh -R 9090:localhost:3000 user@remote_server

    这条命令将远程服务器remote_server的9090端口映射到本地机器的3000端口。

2. SSH密钥认证(Key-based Authentication)

为了提高安全性,SSH支持使用密钥对进行认证,而不是依赖密码登录。首先,你需要在本地机器生成一对SSH密钥:

ssh-keygen -t rsa

然后将公钥上传到远程服务器的~/.ssh/authorized_keys文件中:

ssh-copy-id user@remote_server

这样,以后你就可以使用密钥而不是密码来登录远程服务器。

3. SSH代理转发(SSH Agent Forwarding)

如果你需要在远程服务器上使用本地机器的SSH密钥,可以使用SSH代理转发。首先,在本地启动SSH代理:

eval $(ssh-agent)

然后将你的密钥添加到SSH代理中:

ssh-add ~/.ssh/id_rsa

接着,当你通过SSH登录到远程服务器时,使用-A选项启用代理转发:

ssh -A user@remote_server

这样,你在远程服务器上的操作将能够使用本地机器的SSH密钥。

4. SSH的ControlMaster和ControlPersist选项

如果你需要频繁连接到同一台远程服务器,可以使用ControlMaster和ControlPersist选项来复用SSH连接,从而加速连接过程。

在~/.ssh/config文件中添加以下配置:

Host remote_server
ControlMaster auto
ControlPersist 10m

这将允许SSH复用连接,保持连接持续10分钟,减少每次连接的开销。

冷门用法:SSH代理隧道

在某些情况下,你可能希望通过SSH建立一个完整的代理隧道,来访问受限的网络资源。使用SSH代理隧道可以将你的网络流量通过SSH通道进行加密传输,绕过防火墙等网络限制。

假设你希望通过SSH隧道访问远程服务器的HTTP服务,可以使用如下命令:

ssh -D 8080 user@remote_server

这将创建一个SOCKS代理,所有通过本地8080端口的请求都会通过SSH隧道转发。

总结

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


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best Wenhao (楠博万)

赞(0)
未经允许不得转载:网硕互联帮助中心 » 远程访问没有公网IP的服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!