Jak mogę dowiedzieć się, czy połączenie SSH zostało ustanowione z przekazaniem agenta, czy bez?
Próbuję wykonać następujące czynności:
ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
i porównać wyniki, ale widzę tylko subtelne różnice.
ssh-find-agent
skryptem do znajdowania i używania istniejących ssh-agentów, bardzo przydatne! Repozytorium zawiera kilka przykładów w README. Możesz być w stanie wykryć, czy ssh-agent jest włączony w ten sposób, wraz z przeglądaniem plików konfiguracyjnych SSH, zamiast patrzeć na dane wyjściowe SSH.Odpowiedzi:
Gdy przekazywanie agenta ssh jest włączone na kliencie (
ForwardAgent yes
włączone~/.ssh/config
) i włączone również na serwerze zdalnymAllowAgentForwarding yes
, podczas logowania do serwera zdalnegoSSH_AUTH_SOCK
powinna istnieć zmienna środowiskowa . Następnie, jeśli zalogujesz się na innym serwerze (klucz publiczny musi znajdować się na tym trzecim serwerze), nie powinieneś otrzymywać monitu o podanie hasła.W celu wyjaśnienia:
źródło
ssh-add
właśnie zrobiło dla mnie lewę. Pracowałem od miesięcy, nie wiedząc o tym. Następnie przestawiłem komputery stacjonarne z Unity na LXDE i przekazywanie kluczy agentów przestało działać.ssh-add
każdym razem, gdy otwierasz nowe okno konsoli. Dodałem więc ten wiersz poleceń na końcu~/.bash_profile
, a teraz przekazywanie agenta uwierzytelniania działa za każdym razem w sposób przezroczysty!ssh-agent
skonfigurowałeś poprawnie. Zobacz mah.everybody.org/docs/ssh"${SSH_AUTH_SOCK}"
to gniazdo, które możesz przetestować za pomocąif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Sprawdzanie środowiska
SSH_AUTH_SOCK
jest dobre dla bezpośrednich połączeń ssh.Jeśli używasz proxy (
proxy_command
), możesz mieć połączenie wyglądające jak:local
->hostA
->hostB
->hostC
->hostD
Jeśli przekazywanie agentów jest aktywne na wszystkich tych hostach,
SSH_AUTH_SOCK
zostanie ustawione i „zawiera” klucz ssh zlocal
wszystkich hostów.Załóżmy teraz, że przekazywanie agentów jest wyłączone,
hostB
ale włączonehostC
.SSH_AUTH_SOCK
zostanie włączony,hostD
ale w rzeczywistości będzie „pusty”. Oczywiście agent jest przekazywany, ale tylko odhostC
dohostD
. Łańcuch jest zerwany.Teraz, aby sprawdzić, czy rzeczywiście klucz jest dostępny
hostD
, możesz po prostu zadzwonićssh-add
. W każdym przypadku zakończy działanie z kodem 1, ale jeśli klucz jest niedostępny, wyświetli tostderr
:Możesz więc sprawdzić
SSH_AUTH_SOCK
plus i upewnić się, żessh_add
nie ma danych wyjściowych.źródło