Jak znaleźć aktualną wersję protokołu ssh bieżącego połączenia?

35

Łączę się z maszyną linuxową (centos 6.4) za pomocą szpachli. Poza faktem, że mogę ustawić kit tak, aby korzystał tylko z jednego rodzaju protokołu, jak mogę znaleźć wersję połączenia ssh prądu (SSH1 lub SSH2)?

codiac
źródło
Może pomóc pokazać badania, które już przeprowadziłeś
Drew Khoury,
@DrewKhoury Próbowałem tylko z Google, aby znaleźć odpowiedź na to pytanie, ale nie znaleziono żadnego wyniku w tym zakresie. Nikt nie wyjaśnia, w jaki sposób mogę zobaczyć bieżący protokół połączenia (w użyciu) (ssh1 lub ssh2).
kodiac

Odpowiedzi:

46

Kiedy już będziesz w środku, powiedz:

ssh -v localhost

poda ci dokładną wersję serwera.

cstamas
źródło
4
Nie wydaje się, że pokazuje to obecny typ połączenia.
codiac
18

Wiem, że to stare pytanie, ale odkąd się z nim spotkałem, nie mogłem się powstrzymać przed opublikowaniem alternatywnego sposobu.

Jak sugeruje cstamas , ssh -v localhostmożesz po prostu użyć ssh do siebie 127.0.0.1 w trybie pełnym , który wyświetli komunikat debugowania postępu. Tak, dzięki temu procesowi możesz spojrzeć na górę komunikatu i uzyskać wersję SSH, którą aktualnie uruchomiłeś.

Ale jeśli przeczytasz ssh manstronę, -Vbardziej przydatna będzie opcja ssh. Wyjęto stronę podręcznika ssh :

-V Wyświetl numer wersji i wyjdź.

-v Tryb pełny. Powoduje, że ssh drukuje komunikaty debugujące dotyczące jego postępu. Jest to pomocne w debugowaniu problemów z połączeniem, uwierzytelnianiem i konfiguracją. Wiele opcji -v zwiększa gadatliwość. Maksymalna to 3.

Myślę więc, że lepiej byłoby po prostu zrobić ssh -Vi uzyskać coś podobnego do:

> ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

Mam nadzieję że to pomoże.

Thanos
źródło
2
To jest wersja programu , a nie protokół używany do połączenia. Jak poprawnie wyjaśniono 3-letnią odpowiedź, ten sam program może obsługiwać zarówno protokoły SSH1, jak i SSH2, w zależności od konfiguracji.
dave_thompson_085
11

Putty W sesji, logowanie, wybierz przycisk opcji „Pakiety SSH i nieprzetworzone dane”. Wybierz plik dziennika jako putty.log w wybranej lokalizacji. Nawiąż połączenie. Powinieneś zobaczyć:

Event Log: Server version: SSH-2.0-OpenSSH_5.3
Event Log: Using SSH protocol version 2

Zobacz poniżej, co oznacza SSH-2.0.

Inne metody Możesz także spróbować użyć klienta Telnet, ale wskaż port 22:

telnet test1 22

Po połączeniu zobaczysz:

Próbuję 192.168.144.145 ... Połączono z test1. Znakiem ucieczki jest „^]”. SSH-2.0-OpenSSH_5.3

Ostatni wiersz to ten, którego należy szukać:

SSH-2.0-OpenSSH_5.3

Jeśli powie, SSH-2.0że to dobrze, serwer ssh, do którego się podłączono, obsługuje tylko protokół SSH w wersji 2. Nie będzie obsługiwał połączeń od klientów protokołu SSH V1.

Jeśli jednak widzisz:

SSH-1.99-OpenSSH_5.3

Oznacza to, że koniec serwera nadal obsługuje protokół SSL w wersji 1. W sshd_configpliku znajduje się coś takiego :

Protocol 1,2

Protokół 1 jest wrażliwy i nie należy go używać.

Żeby to wyjaśnić. Jeśli widzisz SSH-2 podczas telnet do portu 22 zdalnego serwera, możesz używać tylko protokołu ssh w wersji 2, ponieważ serwer nie obsługuje protokołu 1.

Zgodnie z odpowiedzią cstamas powyżej flaga -v pokaże linię:

debug1: Remote protocol version 1.99, remote software version OpenSSH_5.3

lub:

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3

Chcesz się version 2.0tam zobaczyć .

davey
źródło
4

Możesz to szybko uzyskać za pomocą netcata z lokalnego komputera, na przykład:

$ nc [IP_ADDRESS] 22
SSH-2.0-OpenSSH_5.3
Awesominator
źródło
3

Lubię to bardziej:

$ echo ~ | nc localhost 22
SSH-1.99-OpenSSH_3.9p1
Protocol mismatch.
$

Zaletą jest to, że można to zrobić programowo, ponieważ połączenie nie jest otwarte. W przypadku Pythona spróbuj:

ssh_protocol = float(re.search(r"SSH-(\d.\d+)").group(1))
Joshua Detwiler
źródło
0

Jedyną znaną mi metodą jest posiadanie wystarczających uprawnień do przeglądania wpisów dziennika ssh /var/log/auth.log.

$ echo $SSH_CONNECTION 
127.0.0.1 12375 127.0.0.1 22

Pierwsze i drugie pole SSH_CONNECTIONzmiennej wskazują źródłowy adres IP i źródłowy port mojego połączenia. Korzystając grepz tych wartości /var/log/auth.log, mogę znaleźć wpis dziennika od momentu uwierzytelnienia mojego połączenia ssh.

$ sudo grep -F ' from 127.0.0.1 port 12375 ' /var/log/auth.log | grep ssh
Jun 26 16:29:52 morton sshd[20895]: Accepted keyboard-interactive/pam for jim from 127.0.0.1 port 12375 ssh2

Ten wpis dziennika mówi mi, że moje bieżące połączenie korzysta z protokołu ssh2. Oczywiście, jeśli sesja ssh była otwarta przez kilka dni, wpis dziennika może znajdować się w /var/log/auth.log.0jakimś starszym auth.logpliku.

Jim L.
źródło