使用 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、dashboard、webservers)后,VS Code 会将这些端口转发到本地计算机,因此无需记住任何内容,端口仅从您当前使用的主机转发 - 以及任意数量的端口,并且仅使用端口。多么方便!

相关内容