Jak określić wiele kombinacji HostName / Port w .ssh / config

10

Mam wiele notebooków i stacji roboczych, które pobierają i wypychają z wielu repozytoriów Mercurial na centralnym serwerze. Zwykle używam .ssh/configdo ustawienia aliasu:

Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156

... i kilka innych opcji, masz pomysł. Następnie mogę po prostu zrobić hg push ssh://repo-server//hgroot/someprojectna każdym lokalnym repozytorium i mogę zmienić adres serwera i port w jednym miejscu.

W przypadku stacji roboczych działa to dobrze, ale notebooki mogą uzyskiwać dostęp do serwera z sieci lub z zewnątrz, używając innego adresu i innego portu. Czy jest jakiś sposób, aby określić wiele kombinacji nazwy hosta / portu, aby SSH automatycznie spróbował je w kolejności? W ten sposób użytkownicy mogą pchać i ciągnąć bez konieczności dbania o właściwy adres.

(oczywiście użycie VPN byłoby najbardziej poprawnym rozwiązaniem)

leoluk
źródło

Odpowiedzi:

5

Obawiam się, że nie jest to możliwe w przypadku SSH.

Możesz obejść ten problem, korzystając z ProxyCommandopcji ssh oraz niestandardowego skryptu, który tworzy połączenie TCP z serwerem (za pomocą netcata), w zależności od tego, w jaki sposób / gdzie podłączony jest twój notebook. Coś w stylu:

#!/bin/bash
SSID=$(/sbin/iwgetid wlan0 -r)

case "$SSID" in
net1)
  nc <host1> <port1>
  ;;
net2)
  nc <host2> <port2>
  ;;
*)
  nc <host3> <port3>
  ;;
esac

W twoim .ssh/configprzypadku potrzebujesz:

Host repo-server
  User user143
  IdentityOnly yes
  IdentityFile ~/hgkey
  ProxyCommand path-to-script
Oliver
źródło
Chyba napiszę skrypt, który modyfikuje HostNamewpisy. Dziękuję Ci.
leoluk
Wygląda to specyficzne dla Linuksa .. na przykład, / sbin / iwgetid nie wydaje się istnieć w WSL ...
Michael
-1

Inną alternatywą może być skonfigurowanie skryptu, aby przekazywał port ssh 22 „prawego” ip do jakiegoś nieużywanego lokalnego portu laptopa, a następnie ssh tam. Używam go w dość wielu sytuacjach.

jacopods
źródło
1
Bez przykładu nie jest to jasne.
Andrew Schulman,