Muszę zarządzać całym stosem hostów przez ssh. Jednak mogę uzyskać do nich dostęp tylko przez określony serwer ssh bramy.
Mam w swoim ~/.ssh/config
:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Jednak muszę połączyć się z wieloma z tych maszyn. Czy zamiast wstawiać do mnie dziesiątki wpisów ~/.ssh/config
, mogę mieć coś takiego:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Wiem, że można używać %h
w Hostname
argumencie, ale to byłaby nazwa hosta. To, czego naprawdę potrzebuję, to pewnego rodzaju podstawienie łańcucha, takie jak bash ${VAR%thingie}
. czy to możliwe?
Wygląda na to, że nie ma na to sposobu.
źródło
Miałem podobny problem i ostatecznie napisałem skrypt, który wygenerował dla mnie cały szablon. Nie zmieniam już ~ / ssh / config, zmieniam ~ / ssh / config.in i ponownie uruchamiam skrypt.
źródło
.ssh/config.d
plik z każdym szablonem, w którym każdy szablon wygenerowałby jeden lub więcej wpisów w końcowej wersji~/.ssh/config
. Byłby też plik ze zmiennymi uniwersalnymi, ale każdy szablon mógłby mieć swoje własne zmienne, które miałyby pierwszeństwo przed globalnymi, wymienione na górze.~/.ssh/config
Plik może zostać wygenerowany na żądanie lub według harmonogramu, to nie kwestia, jak długo nigdy dokonane zmiany bezpośrednie do niej, że chce zachować.Zignoruj określenie
Hostname
zastąpienia nazwy hosta bezpośrednio za pomocą deklaracji i zamiast tego określ ją w czasie wykonywania. Zrób to, oceniając go jako częśćProxyCommand
, używając%h
do odwołania go w poleceniu (użyj również%p
zamiast portu na stałe jako 22), tj.Można nawet zastosować bardziej ogólną zwrotkę, w której można określić dowolny host bez
-
konieczności traktowania go takim, jaki jest, lub zgodnie z inną pasującą zwrotką, ale zastosować ogólne-
podejście do określenia dowolnej<gateway>-<target>
:Ponadto nowsze wersje klienta SSH obsługują
[-W host:port]
opcję bezpośredniego wykonywania tej samej funkcji conc
(netcat). W związku z tym możemy użyć zmodyfikowanego:Oczywiście, jeśli masz skończoną listę hostów, zawsze możesz:
Mam nadzieję że to pomoże!
źródło
Miałem klienta z tą samą konfiguracją i użyłem DSSH do rozwiązania mojego problemu.
DSSH pozwala między innymi na przezroczyste logowanie do hostów zdalnych za pośrednictwem hosta bramy.
Przypadków użycia
źródło