Mam ~/.ssh/config
skonfigurowane różne hosty, które są dostępne albo w sieci VPN naszej firmy, albo przez serwer proxy SSH.
W tej chwili po prostu mam
Host internal-server
ProxyCommand ssh -W internal.ip:22 external-server
Jeśli jednak jestem w sieci wewnętrznej, mogę bezpośrednio uzyskać dostęp do wewnętrznego adresu IP, więc proxy przez zewnętrzny serwer tylko opóźnia połączenie.
Czy istnieje sposób, w jaki mogę tymczasowo proxy, jeśli wewnętrzny adres IP nie jest osiągalny, i w inny sposób połączyć się bezpośrednio?
%
postaci nie ma nic specjalnego . Możesz użyć wszystkiego naprawdę. Procent jest używany, ponieważ nie jest prawidłowy w nazwie hosta lub nazwie użytkownika.cut
Komenda withing się ProxyCommand używa%
jako separatora wyciągnąć hosta.ssh targetH
, co oznacza cel z domu . Jeśli jest to sieć lokalna, na którą można celować, po prostussh target
. Byłoby miło, gdyby w odpowiedzi było to bardziej jednoznacznie określone.Używam innej metody przy użyciu dopasowania. W moim przypadku chcę użyć lokalnego serwera proxy, jeśli jest uruchomiony, czy nie, jeśli nie jest. Następująca dyrektywa ładnie to osiąga:
Pasuje do każdej próby ssh i wykonuje szybkie sprawdzenie za pomocą,
nc
aby sprawdzić, czy mój serwer proxy działa i działa na 1086 (w takim przypadkunc
kończy się bez błędu). Jeśli tak się stanie, ustawia ProxyCommand.źródło
Dziesięć lat temu napisałem polecenie proxy dla tego rodzaju scenariusza. W twoim przypadku można użyć mojej komendy proxy w następujący sposób:
Kilka ostrzeżeń: Jestem trochę zawstydzony przyznając, że nie obsługuje IPv6 i że spróbuje tylko jednego adresu IP na nazwę hosta. Ponadto nie przeniesie banera klienta na serwer przed wysłaniem banera serwera. Ale raczej nie spowoduje to problemów.
źródło
Dzięki za odpowiedź @ till , bardzo mnie to zainspirowało.
Odkryłem, że możesz siłą przekierować swoje połączenie
ProxyCommand nc dst dst-port
.Na przykład połączysz się,
B.com
jeśli korzystaszAle
UserKnownHostsFile
nadal będzie nagrywać jakoA.com
Możesz dodać domenę „auto” do swojej
ssh_config
Wymieniłem
nc -w 1 %h %p
z(timeout 0.1 nc -z %h %p) && nc %h %p
, to będzie bardziej szybkie, jeśli można dotrzeć do wewnętrznego serwera mniej niż 100ms.Lub możesz go zastąpić
ping
, ale może to oznaczać złe informacje, jeśli używasz serwera proxy opartego na TCPproxychains
lub serwer nie zezwala na echo ICMP.Możesz zastąpić
(timeout 0.1 nc -z %h %p)
wszystko, co wykrywa, czy jesteś na serwerze wewnętrznym.Jeśli masz wiele adresów IP kandydatów, nawet Ty możesz użyć tego:
Spróbuje się połączyć
1.1.1.1
, jeśli nie, spróbuj się połączyć2.2.2.2
, a następnie3.3.3.3
.źródło
Działa to nieco bardziej automagicznie z niewielkim dodatkowym opóźnieniem 0,1 s:
źródło
Zwykle tworzyłem inny wpis, taki jak ten -
Następnie po prostu wywołaj ten, który chcesz, w zależności od bieżącego środowiska proxy.
źródło