透過 localhost 映射 ssh 連接

透過 localhost 映射 ssh 連接

我不確定我想做的事情是否可行,但我正在嘗試使用連接埠轉送透過 localhost 建立 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 連線。

-L 2222:localhost:22

2222是將在您的計算機上打開的端口,也是localhost:22伺服器將嘗試連接的最終目的地。

我很驚訝,這不是連接被拒絕或超時或其他什麼,所以我想知道這是否是一些設定問題。

SSH-L轉送不像路由器的連接埠轉送那樣在封包層級運作。它工作在 TCP 層級——客戶端本身偵聽連接,每當收到連接時,它就會要求伺服器連接到最終目的地。

因此有 3 個鍊式連線:客戶端 #2 → 用戶端 #1 → 伺服器 → 目的地。

這意味著如果伺服器無法連接,客戶端#1(執行轉送)不可能為客戶端#2 產生「連線被拒絕」錯誤,因為本機連線實際上已被拒絕。公認已經。它唯一能做的就是關閉現有連線而不傳輸任何資料。因此「連線被對等方重置」。

相關內容