![透過 localhost 映射 ssh 連接](https://rvso.com/image/1609684/%E9%80%8F%E9%81%8E%20localhost%20%E6%98%A0%E5%B0%84%20ssh%20%E9%80%A3%E6%8E%A5.png)
我不確定我想做的事情是否可行,但我正在嘗試使用連接埠轉送透過 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 產生「連線被拒絕」錯誤,因為本機連線實際上已被拒絕。公認已經。它唯一能做的就是關閉現有連線而不傳輸任何資料。因此「連線被對等方重置」。