Dlaczego „ssh_config (5)” manpages zalecić ControlPath
opcja powinna zawierać co najmniej %h
, %p
a %r
zastępcze w celu jednoznacznej identyfikacji każdego udostępnionego połączenia?
Pomyślałem, że wiele sesji powinno współdzielić to samo gniazdo z połączeniem z tym samym hostem. Czy nie ma więc sensu mieć prostą definicję, taką jak:
ControlPath ~/.cache/ssh/mux/%h
Zamiast czegoś takiego:
ControlPath ~/.cache/ssh/mux/%r@%h:%p
W moim rozumieniu pierwszej definicji jedno połączenie jest współużytkowane przez wiele sesji z różnymi zdalnymi użytkownikami, do tego samego zdalnego hosta, na różnych zdalnych portach.
Chcę mieć pierwszą definicję w domyślnej sekcji hosta, aby wystarczyło powiedzieć ssh -o ControlMaster=no
.
Chcę udostępnić połączenie z tym samym hostem zdalnym między wszystkimi sesjami zainicjowanymi przez tego samego użytkownika lokalnego, niezależnie od użytkownika zdalnego i portu zdalnego. Gniazdo klienta głównego powinno znajdować się poniżej katalogu domowego użytkownika lokalnego.
źródło
Odpowiedzi:
Mogą. Pamiętaj jednak, że jeśli łączysz się z hostem za pomocą istniejącego połączenia
ControlPath
, niezależnie od tego, który użytkownik zamierza się zalogować, zostaniesz zalogowany jako oryginalny użytkownik połączenia. Np. Bez ustalonego połączenia z „gdzieś”:Ta sesja to gdzieś bob @.
Ta sesja też będzie gdzieś bob @, ponieważ użyłeś tej samej ControlPath i ustawiłeś
ControlMaster=no
; gdybyśControlMaster=yes
był zalogowany jako sue, ale ssh zignoruje twój argument ControlPath, co sugerujeman ssh_config
:Jako dowód tego, jeśli
ControlMaster=yes
w obu przypadkach, gdy bob wyjdzie, gniazdo ControlPath~/.ssh/somewhere
zniknie, nawet jeśli sesja „sue” nadal działa, co oznacza, że sesja sue nigdy nie korzystała z tego gniazda .Tak więc, jeśli chcesz korzystać z tego samego połączenia,
%h
jest w porządku, ale uważaj, że nie możesz udostępnić połączenia wielu użytkownikom zdalnym - ssh ci na to nie pozwoli.źródło
Możesz mieć wielu użytkowników i wiele portów używanych nawet dla tego samego serwera. Sam łączę się z setkami systemów w intranecie firmy, większość ma wielu użytkowników z różnymi funkcjami lub serwerami aplikacji. Dostęp do użytkownika A różni się bardzo od dostępu do użytkownika B, a połączenie główne musiałoby być inne. Bardziej zwięźle, jeśli miałbyś biec:
Jak widać, nie otrzymujemy sesji OpenSSH z użytkownikiem B, ale oryginał z użytkownikiem A. Oznacza to, że katalog domowy, uprawnienia, a nawet samo uwierzytelnianie nie są tym, czego się oczekuje. Korzystając z tego, jeśli spróbujesz usunąć plik z katalogu użytkownika B, to a) może to być zły plik i b) może to być złe uprawnienia.
Jeśli nigdy nie będziesz łączyć się z więcej niż jednym użytkownikiem na jednym serwerze za pomocą jednego portu, wtedy tak, użycie
%h
może wystarczyć. W swoim~/.ssh/config
pliku chciałbyś użyć:Dzięki tej
ControlPersist
opcji połączenie główne pozostaje otwarte w tle, dopóki nie zostanie zabite lub zakończonessh -O exit
. To fajna funkcja „ustaw i zapomnij”.Ale jeśli istnieje jakikolwiek możliwość podłączenia do więcej niż jednego użytkownika na jednym hoście, wtedy chcesz coś bardziej bezpieczne:
źródło