Skonfigurowałem przekierowywanie portów ssh i routera, aby móc ssh do komputera w mojej sieci domowej, gdy nie ma mnie w domu. Obecnie w moim .ssh/config
pliku są dwa wpisy: jeden dla mojej sieci domowej i jeden dla mnie, gdy nie jestem:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
To działa, ale zastanawiam się, czy mogę sobie ułatwić sprawę. Miałem nadzieję, że istnieje sposób na wyświetlenie listy wielu wpisów HostName, tak że jeśli pierwsza nie powiedzie się, spadnie do drugiej:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Tak, że najpierw spróbuje połączyć się z hostem w mojej sieci lokalnej, a jeśli go nie ma, spróbuje połączyć się przy użyciu mojej dynamicznej nazwy hosta bez adresu IP. Próbowałem wprowadzić dwie nazwy hosta, ale uruchomiłem ssh mycomputer
tylko bloki i nic nie robiłem.
Wyłączyłem uwierzytelnianie hasła na rzecz kluczy, więc przypadkowe połączenie z komputerem w sieci lokalnej, gdy nie jestem w sieci domowej, nie powinno ryzykować, że moje hasło dotrze tam, gdzie nie powinno.
Czy można określić zastępcze nazwy hosta, aby wypróbować, jeśli pierwszy nie działa?
.ssh/config
można uruchamiać skrypty dla niektórych właściwości. Wiem, że możesz dzięki ProxyCommand. Można coś zrobić, jak pokazano w tym Q & A z SF - serverfault.com/questions/401233/... .Odpowiedzi:
To brzydkie, ale myślę, że można to zrobić, stosując
exec
kryterium doMatch
statusu wyjścia z pukania do portu npZauważ, że tak naprawdę nie jest w stanie stwierdzić, czy jesteś w „domowej” sieci domowej - tylko, że jesteś w prywatnym segmencie sieci LAN z tym samym zakresem adresów, który przypadkowo ma usługę nasłuchującą na tym samym adresie / porcie.
źródło
-w 1
albonc
wydawało się, że czekam wiecznie. Prostszy może być drugi mecz,Match exec "true"
ponieważ jeśli pierwszy mecz się nie powiedzie, po prostu na ślepo wypróbuj drugi wybór.Match
nie maElse
)ssh xyz.com
mójMatch exec "true"
złowione i przekierowanie mnie do mojego serwera domowego używając mojego zdalnego hosta. Spróbuję z twoim dyrektorem, ale myślę, że to samo się stanie.Match exec... Match !exec
powoduje, że ssh'ing do innych domen wyzwalaMatch !exec
i przepisuje nazwę hosta.~/.ssh/config
nie mniej ważne jest wcięcie. Niektóre polecenia resetują zakres, tzn. Każda nowa linia hosta mówi „poprzednie linie były dla poprzedniego hosta, następne linie dla tego nowego hosta”. Okazuje sięMatch
, że ma taką samą moc „resetowania zakresu” jak Host. Aby to uwzględnić, zastąpiłem linię hostaMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
i zdefiniowałem wszystkie niestandardowe wartości dla mojej sieci lokalnej. Następnie dodałem pasującą linię oprócz!exec
i dodałem wszystkie wartości, kiedy jestem poza siecią. Teraz działa dobrze dla wszystkich hostów.Używam w ten sposób.
ssh_config nie ma czegoś takiego jak blok wcięcia. Jeśli chcesz ograniczyć zdanie dopasowania do konkretnego hosta, powinieneś opisać pełny warunek.
Można uniknąć długiego oczekiwania
nc
, nadając mu-G 1
opcję (limit czasu połączenia 1s), i można wykorzystać następujące zachowanie, aby uniknąć wielokrotnego wywoływanianc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
źródło
Nie; jeśli określisz wiele
HostName
s dla jednegoHost
wpisu, tylko pierwszy zostanie potwierdzony:źródło
ssh mycomputer
, powinno być dość jednoznaczne, z którym komputerem się łączę.