使用 DNS 自動進行 ssh 連接埠轉送

使用 DNS 自動進行 ssh 連接埠轉送

host1為簡單起見,我有許多 ssh 主機(十幾個),host2等等。

我經常需要轉發端口,例如

ssh -L 8888:localhost:8888 host1
ssh -L 8889:localhost:8888 host2
ssh -L 8890:localhost:80   host2

這很煩人,因為 1)我需要記住從本機連接埠到主機的映射,2)我需要手動執行此操作

我想實現某種監聽特定主機(本地,在我的機器上)的系統,例如host1.8888.ssh.local並自動打開到該位址的隧道。

答案1

您可以在 ssh 設定檔中配置所有這些內容,通常位於以下位置:$HOME/.ssh/config

例如:

Host abc
    Hostname 1.2.3.4
    Port 345
    IdentityFile /path/to/id_rsa
    LocalForward 8888 localhost:8888
    User root
Host def
    Hostname 2.3.4.5
    User root
    LocalForward 8889 localhost:8889

這樣,您只需鍵入ssh abc即可套用您在其中指定的所有設定。裡面找到的可用選項手冊頁

答案2

我開發了ssh隧道這是一項將建立隧道並保持其運作的服務。

server "srv_us"
  HostName="srv.us"
  User="root"
  IdentityFile="/root/.ssh/id_ed25519"

tunnelR "srv_us_http"
  servername="srv_us"
  remoteaddress="1"
  remoteport=80
  localaddress="127.0.0.1"
  localport=8080

如果您有 OpenWrt 路由器,您可以使用類似的ssh隧道服務。最近新增了一個 GUI 來配置它 luci-app-sshtunnel。

答案3

來自未來的註釋,與所提出的問題無關,但解決了根本問題。

如果您在伺服器上使用VS Code 進行操作,則在啟動任何進程(例如Jupyter、Tensorboard、儀表板、Web 伺服器)後,VS Code 會將這些連接埠轉送到本機,因此無需記住任何內容,這些連接埠僅從您目前使用的主機 - 以及任意數量的端口,並且僅使用的端口。多麼方便啊!

相關內容