Wyłącz uwierzytelnianie hasłem dla SSH

127

Szukam sposobu, aby uniemożliwić klientom SSH dostęp do monitu o hasło, jak wspomniano tutaj .

Nie mogę wyłączyć password:monitu o logowanie jako root . Zmieniłem sshd_configplik do przeczytania:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

a także zmienili uprawnienia chmod 700 ~/.sshi chmod 600 ~/.ssh/authorized_keys. czego mi brakuje? Czy to wymaga hasła?

Zrzut szczegółowy:

debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug1: Next authentication method: password

Plik / etc / ssh / sshd_config:

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile    %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no
Matt Stokes
źródło
ssh -v user @ server, aby uzyskać szczegółowe dane wyjściowe pomocne w rozwiązywaniu problemów.
Niall Byrne,
Zarówno ssh_configi sshd_configmieć PasswordAuthentication- pobyt ostre!
Brent Bradburn,

Odpowiedzi:

199

W pliku /etc/ssh/sshd_config

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication no

Odkomentuj drugą linię i, jeśli to konieczne, zmień tak na nie.

Następnie uruchomić

service ssh restart
Kimvais
źródło
7
Wiele przewodników sugeruje zmianę ChallengeResponseAuthentication, PasswordAuthentication, UsePAM z Yes na No na serwerze. Pomyślnie przetestowany pod Debianem / Ubuntu.
10
FYI, systemowy sposób ponownego uruchomienia usługi to: systemctl restart sshdJest to ustawienie domyślne w nowszym Ubuntu.
therealjumbo
Jak dodać nowe klucze do serwera, gdy uwierzytelnianie hasłem jest wyłączone? Z pewnością jest na to sposób, bez konieczności włączania uwierzytelniania hasłem, za każdym razem, gdy ktoś chce dodać klucz ...
Mateusz
1
@Matthew Być może używającssh-copy-id
iamyojimbo
@iamyojimbo, ale nadal potrzebujesz autoryzowanego klucza, aby móc się połączyć i wysłać go za pomocą tego polecenia.
Matthew
16

Biegać

service ssh restart

zamiast

/etc/init.d/ssh restart

To może zadziałać.

Satoshi Nakanishi
źródło
To zadziałało dla mnie; jakieś pomysły, dlaczego użycie init.d nie?
Seb
1
Zależy od twojego gustu w Linuksie ... Na gentoo oba działają dla mnie.
Gene Pavlovsky
16

Oto skrypt, który zrobi to automatycznie

# Only allow key based logins
sed -n 'H;${x;s/\#PasswordAuthentication yes/PasswordAuthentication no/;p;}' /etc/ssh/sshd_config > tmp_sshd_config
cat tmp_sshd_config > /etc/ssh/sshd_config
rm tmp_sshd_config
JasonS
źródło
3

Wykonałem te czynności (dla komputerów Mac).

Na /etc/ssh/sshd_configzmianę

#ChallengeResponseAuthentication yes
#PasswordAuthentication yes

do

ChallengeResponseAuthentication no
PasswordAuthentication no

Teraz wygeneruj klucz RSA:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

(U mnie działał klucz RSA. Klucz DSA nie działał).

Klucz prywatny zostanie wygenerowany ~/.ssh/id_rsawraz z ~/.ssh/id_rsa.pub(klucz publiczny).

Teraz przejdź do folderu .ssh :cd ~/.ssh

Enter rm -rf authorized_keys(czasami wiele kluczy prowadzi do błędu).

Wchodzić vi authorized_keys

Wchodzić :wq aby zapisać ten pusty plik

Wchodzić cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Uruchom ponownie SSH:

sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
Anand Prakash
źródło
Nie możesz użyć touchdo utworzenia pustego pliku authorized_keys?
Peter Mortensen
-8

To pochodzi z samouczka, który mam:

Na twoim komputerze jako root:

ssh-keygen -t rsa

I zostaw hasło puste.

Z komputera lokalnego (i będziesz musiał wpisać hasło):

ssh root@remotemachine mkdir -p .ssh

Następnie:

cat .ssh/id_rsa.pub | ssh root@remotemachine 'cat >> .ssh/authorized_keys'

Teraz możesz zalogować się bez pytania o hasło

ssh root@remotemachine

Zobacz logowanie SSH bez hasła, jeśli masz jakiekolwiek problemy!

Fabrizio Mazzoni
źródło
2
Chcę zablokować wyświetlanie monitu o hasło w każdych okolicznościach. Wymuś logowanie tylko za pomocą klucza ssh
Matt Stokes
To powinno wystarczyć. Otworzy się bezpośrednio, bez pytania o hasło, ale od konkretnego klienta.
Fabrizio Mazzoni,
1
tak, ale pozwoli to również klientom, którzy nie są upoważnieni, na próbowanie hasła, prawda?
Matt Stokes
Zmień następujące ustawienia: ChallengeResponseAuthentication no, PasswordAuthentication no, UsePAM no To zezwoli tylko na uwierzytelnianie klucza. Właśnie przetestowany na moim systemie i odmówi za pomocą: Odmowa dostępu (klucz publiczny)
Fabrizio Mazzoni,
1
Nie usunąłeś komentarzy z sekcji PasswordAuthentication, jeśli przesłany plik jest rzeczywistą konfiguracją
Fabrizio Mazzoni,