Jak zmusić klienta ssh do używania tylko uwierzytelniania hasłem?


375

Jeśli korzystam z klucza publicznego z np. Ubuntu 11.04, jak mogę ustawić klienta ssh, aby używał tylko hasła do serwera? (potrzebne tylko z powodu testowania haseł na serwerze, na którym domyślnie loguję się za pomocą klucza)

Znalazłam drogę:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

a teraz pojawia się monit o hasło, ale czy są jakieś oficjalne sposoby?

Odpowiedzi:


578

Ostatnio też tego potrzebowałem i wymyśliłem:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Musisz upewnić się, że klient nie jest skonfigurowany do blokowania uwierzytelniania hasła.


4
Musiałem wymusić monit o podanie hasła, aby pojawił się w środowisku, w którym Kerberos był używany do automatycznego uwierzytelniania, a podobne polecenie działało dla mnie w tej konkretnej sytuacji: ssh -o GSSAPIAuthentication=no example.com
IllvilJa

21
Miły. -o PubkeyAuthentication=noW moim przypadku wystarczyło tylko .
mivk

10
do ssh do znajomego laptopa osx, musiałem użyć: -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no zamiast
guido

4
To mi nie działa. Ciągle mówi: Odmowa zezwolenia (publickey). i nigdy nie oferuje pytania o hasło.
reinierpost

7
@reinierpost prawdopodobnie dlatego, że host ssh został wyłączony PasswordAuthentication. W rzeczywistości jestem tutaj, ponieważ chciałem przetestować, czy wyłączenie uwierzytelniania hasła działało poprawnie na moim hoście.
RubberDuck,

168

Znalazłem skrót do tego celu:

ssh user:@example.com

Zwróć uwagę na dwukropek ( :) i puste hasło po nim.


2
Nie ma jeszcze dokumentacji. Właściwie przeszukałem kod źródłowy OpenSSH bezskutecznie (jego etap parsowania jest raczej tajemniczy i tu jest rano :)). Moja początkowa motywacja: wielu klientów prosi o hasło, jeśli podasz puste hasło, np.mysql -u user -p
Halil Özgür

43
To wydaje się już nie działać, przynajmniej nie w moim przypadku. sshklient ślepo próbował niepowiązanymi kluczami prywatnymi uwierzytelnić się na nowo zainstalowanym serwerze i nadal być odrzucany z powodu maksymalnej liczby prób uzyskania dostępu bez pytania o hasło. Aby wymusić uwierzytelnianie hasłem dla tego pierwszego połączenia, musiałem użyć -o PreferredAuthentications=passwordskładni, a dwukropek nie miał zauważalnego efektu. Dlatego, chociaż warto spróbować tej sztuczki, nie należy polegać na niej jako na konsekwentnym zachowaniu.
WhiteWinterWolf

2
@ HalilÖzgür: Smutne wieści, dużo łatwiej było zapamiętać i pisać;)!
WhiteWinterWolf

3
@Qualcuno, jak powiedział WhiteWinterWolf, niestety nie działa już na niektórych platformach.
Halil Özgür

2
Upewnij się, że w pliku ssh_config nie ma hasła do uwierzytelnienia!
Braiam

32

Oprócz metody opublikowanej przez scoopr, możesz ustawić opcje hosta w pliku konfiguracyjnym klienta ssh.

W swoim .sshkatalogu utwórz plik o nazwie config(jeśli jeszcze nie istnieje) i ustaw uprawnienia na 600, możesz następnie utworzyć sekcje zaczynające się od

host <some hostname or pattern>

a następnie ustaw opcje dla poszczególnych hostów, na przykład

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

żebyś mógł

host server.to.test
PubkeyAuthentication=no

w tym pliku, a następnie po prostu

ssh server.to.test

i opcja zostanie odebrana.


Dziękuję za tę odpowiedź. Utworzyłem wpis w moim ~/.ssh/configi dodałemPubkeyAuthentication no
Craig London

2
Nie działa dla mnie
reinierpost

11

Ostatnio tego potrzebowałem, ale żadna z powyższych opcji nie zadziałała, ssh -vpokazała, że ​​opcje wiersza poleceń przekazane przez -oprzełącznik zostały zastąpione wartościami podanymi w moim ~/.ssh/configpliku.

Zadziałało to:

ssh -F /dev/null <username>@<host>

Ze strony podręcznika ssh:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Podziękowania dla tej odpowiedzi: Jak sprawić, aby ssh zignorował plik .ssh / config?


1
to nie odpowiada na pytanie. Zawsze możesz mieć klucze przechowywane w agencie, a twoje podejście nie uniemożliwi klientowi ich użycia.
Jakuje

Hm, jak zaradzić temu problemowi, a także temu, o którym wspomniałem w mojej odpowiedzi?
adeelx

2
Również jeśli masz klucze w standardowej lokalizacji (jak w pytaniu), będą one używane niezależnie od tego, czy konfiguracja jest obecna, czy nie. Wybrałbym jedną z metod wymienionych w pierwszych odpowiedziach.
Jakuje

Nie do końca prawda, właśnie przetestowałem to na moim Lubuntu 14.04 i chociaż mam klucze w standardowej lokalizacji ~/.ssh/config, klucze się nie przydadzą, jeśli je podam -F /dev/null. ssh -vDane wyjściowe pomagają w tym przypadku, wyraźnie pokazuje, że ponieważ mam wpis catch-all w mojej konfiguracji ssh *, wybiera użycie klucza publicznego zamiast respektować opcje przekazane przez -oprzełącznik, jak w poprzednich odpowiedziach.
adeelx

1
Standardowa lokalizacja jest ~/.ssh/id_rsapodana na stronie podręcznika. Te ścieżki są zakodowane na stałe w kliencie. Tylko upewnij się, że podajesz poprawnego użytkownika podczas testowania.
Jakuje

4

Próbowałem kilka z tych odpowiedzi, ale ssh -vnadal pokazywałem, że moje klucze publiczne są wyciągane z mojego katalogu domowego. Jednak podanie fałszywego pliku tożsamości pomogło mi:

ssh -i /dev/null host

Muszę to zrobić na stałe (do obejścia złamaną serwerem SSH w szafie zamontowane listwy APC - pobyt daleko od tych rzeczy, jeśli dbasz o bezpieczeństwo - tak skończyło się na wprowadzenie opcji w moim pliku konfiguracyjnym:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null


2

Upewnij się także, że BatchMode=yesw .ssh / config nie ma żadnych aktywnych. W przeciwnym razie nie masz szans na uzyskanie interaktywnego hasła.


0

Być może jestem jedynym na świecie z tym problemem, ale miałem uruchomiony sshinny system operacyjny (choco ssh w systemie Windows w powłoce cygwin) widziany za pośrednictwemwhich ssh

Tak więc rozwiązaniem było

 /usr/bin/ssh user@example.com

Zanotuj pełną ścieżkę. Zrobiłem to po biegucyg-get openssh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.