
У меня есть несколько хостов ssh (десяток), для простоты host1
, 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
Я разработалsshtunnelэто служба, которая будет создавать туннели и поддерживать их работу.
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, вы можете использовать похожийsshtunnelсервис. Недавно был добавлен графический интерфейс для его настройки luci-app-sshtunnel.
решение3
Записка из будущего, которая не имеет ничего общего с заданным вопросом, но решает основную проблему.
Если вы делаете что-то в vs code на сервере, после запуска любого процесса (например, jupyter, tensorboard, dashboards, webservers), vs code перенаправляет эти порты на локальную машину, поэтому нет необходимости что-либо запоминать, порты перенаправляются только с хоста, с которым вы в данный момент работаете, и любое количество портов, и только используемые порты. Какое удобство!