通过 localhost 映射 ssh 连接

通过 localhost 映射 ssh 连接

我不确定我尝试做的事情是否可行,但我正在尝试通过带有端口转发的本地主机建立 SSH 连接。

我之所以要这样做,是因为我在云提供商上有一些配置,每次初始化实例时都会获得不同的 IP 地址,这意味着每次运行时我都必须更改开发环境中的一些设置。我想知道我是否可以通过一些静态本地主机设置来引导它,这样可以让它变得不那么繁琐。

因此,目前,我可以按如下方式连接,并且添加了一些端口转发:

ssh [email protected] -L2222:localhost:2222

我希望我能做类似的事情:

ssh luca@localhost -p 2222

但这会带来错误:

ssh_exchange_identification: read: Connection reset by peer

我很惊讶,这不是连接被拒绝或超时或任何问题,所以我想知道这是否是一些设置问题。

答案1

我在云提供商上进行了一些配置,每次初始化实例时都会获得不同的 IP 地址,这意味着每次运行时我都必须更改开发环境中的一些设置。我想知道我是否可以通过一些静态本地主机设置来引导它,这样可以让它变得不那么繁琐。

解决这个问题的常用方法是……DNS。创建一个具有非常低TTL的子域,并在每次重新创建时更新其A/AAAA记录以指向新实例。一些云提供商甚至可以自动执行此操作。

(如果全局 DNS 不起作用,那么 /etc/hosts 也可以起作用。)

因此,目前,我可以按如下方式连接,并且添加了一些端口转发:

ssh [email protected] -L2222:localhost:2222

您的远程服务器可能未配置为侦听端口 2222 上的 SSH 连接。它仅配置了标准端口 22。因此,您想要的转发选项是:

-L 2222:localhost:22

2222是您的计算机上将打开的端口,也是localhost:22服务器将尝试连接的最终目的地。

我很惊讶,这不是连接被拒绝或超时或任何问题,所以我想知道这是否是一些设置问题。

SSH-L转发不像路由器的端口转发那样在数据包级别工作。它工作在 TCP 级别——客户端本身监听连接,每当收到连接时,它就要求服务器连接到最终目的地。

因此有 3 个链式连接:客户端 #2 → 客户端 #1 → 服务器 → 目的地。

这意味着,如果服务器连接失败,客户端 #1(执行转发)不可能为客户端 #2 产生“连接被拒绝”错误,因为本地连接实际上已被公认已经。它唯一能做的就是关闭现有连接而不传输任何数据。因此“对等方重置连接”。

相关内容