Comment SSH vers localhost sans mot de passe?

17

EDIT: Mettre exactement ce qui a été fait.

J'ai besoin de SSH localhostsans mot de passe, la façon habituelle de le faire (avec des clés publiques) ne fonctionne pas.

user@PC:~$ rm -rf .ssh/*
user@PC:~$ ssh-keygen -t rsa > /dev/null 
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
user@PC:~$ ls .ssh/
id_rsa  id_rsa.pub
user@PC:~$ ssh-copy-id -i localhost 
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is f7:87:b5:4e:31:a1:72:11:8e:5f:d2:61:bd:b3:40:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh-agent $SHELL
user@PC:~$ ssh-add -L
The agent has no identities.
user@PC:~$ ssh-add 
Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
user@PC:~$ ssh-add -L
ssh-rsa ...MY KEY HERE

user@PC:~$ ssh-copy-id -i localhost 
user@localhost's password: 
Now try logging into the machine, with "ssh 'localhost'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

user@PC:~$ ssh localhost echo 'testing'
user@localhost's password: 

user@PC:~$ 

Comme vous pouvez le voir dans la dernière commande, il demande toujours le mot de passe !!! Comment puis-je résoudre ce problème ?? Ubuntu-10.04, OpenSSH_5.3p1

EDIT2:

Ajout d'informations sur le sshd

user@PC:~$ cat /etc/ssh/sshd_config | grep Authentication
# Authentication:
RSAAuthentication yes
PubkeyAuthentication yes
RhostsRSAAuthentication no
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
ChallengeResponseAuthentication no
# PasswordAuthentication yes
#KerberosAuthentication no
#GSSAPIAuthentication no
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.

EDIT3: résultat de l'addition de $ ssh -vv localhost

$ssh -vv localhost
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/identity
debug1: Offering public key: /home/user/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
user@localhost's password: 

EDIT4:

Je vérifie simplement si les fichiers sont les mêmes et que le md5sum est d'accord

Canésine
la source
Avez-vous RSAAuthentication yeset PubkeyAuthentication yesdans votre / etc / ssh / sshd_config? Que montre ssh -vv localhost? Je viens de l'essayer sur une boîte 10.04 et je n'ai eu aucun problème ..
Doon
Hy Doon, en effet .. J'ai les deux à oui .. J'ai ajouté la sortie de ssh -vv dans la question.
Canesin
Pourquoi avez-vous besoin de ssh vers localhost si vous y avez déjà accès?
vtest
Les logiciels de traitement parallèle utilisent local ssh / rsh
Canesin
Veuillez ne pas poster la réponse dans la question ou mettre "RESOLU" dans le titre. Vous avez fait la bonne chose en fournissant une réponse. Une fois que vous avez accepté la réponse, le système montrera que le problème est résolu.
ChrisF

Réponses:

10

Tout d'abord, vous devez comprendre ce que vous faites:

user@PC:~$ cat .ssh/id_rsa.pub | ssh localhost 'cat >> .ssh/authorized_keys'

Vous copiez la clé publique .ssh/id_rsa.pubvia ssh, sur le même hôte (c'est ce que localhost est, le même hôte). Si vous remplacez localhostpar un autre hôte, cela aurait plus de sens (mais si vous essayez cela pour apprendre à le faire, c'est ok).

Une fois que vous avez une copie de votre clé publique sur l'hôte distant (ou la même que celle dans laquelle vous vous trouvez), vous devez vous assurer que vous l'utilisez pour l'authentification, dans votre hôte réel, en appelant ssh-agent/ ssh-add:

$ eval `ssh-agent`
$ ssh-add

Ensuite, si vous avez fourni une phrase secrète, vous serez invité à la saisir après ssh-add. Si vous avez généré une clé privée sans phrase secrète, c'est tout.

Torian
la source
Oui, je comprends les commandes, je viens de dire comme ça que j'ai fait le truc habituel avec les touches. J'ai fait ssh-add ... il ne demande pas la phrase secrète (comme je n'en ai utilisé aucune dans la création) .. mais encore une fois, en faisant, $ ssh localhost ls, il demande le mot de passe
Canesin
Donc, si vous avez exécuté ssh-add, veuillez modifier votre question et mettre tout ce que vous avez fait. Plus vous donnez d'informations, meilleure et plus rapide est la réponse.
Torian
Désolé pour ça, réparé maintenant .. J'ai ajouté le terminal, j'ai tout refait coller ici ..
Canesin
Merci un million de fois! BTW, pourquoi " eval"?
IProblemFactory
3

J'ai découvert le problème.

Exécution du serveur avec débogage:

$sshd -Dd

J'ai trouvé qu'il n'était pas en mesure de lire l'auth_key

$chmod 750 $HOME

A corrigé.

Canésine
la source
Quels étaient les drapeaux de fichiers précédents?
bbaja42
2

Effectuez les étapes suivantes

ssh-keygen -t rsa -C "[email protected]"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.

Utilisez le fichier par défaut et la phrase secrète vide (appuyez simplement sur Entrée dans les 2 étapes suivantes)

# start the ssh-agent in the background
eval "$(ssh-agent -s)"
# Agent pid 59566
ssh-add 

Copiez le contenu de ~ / .ssh / id_rsa.pub dans ~ / .ssh / authorized_keys

Assurez-vous que les autorisations sont les suivantes

 ls -l .ssh/
 total 20
-rw-r--r--. 1 swati swati  399 May  5 14:53 authorized_keys
-rw-r--r--. 1 swati swati  761 Jan 12 15:59 config
-rw-------. 1 swati swati 1671 Jan 12 15:44 id_rsa
-rw-r--r--. 1 swati swati  399 Jan 12 15:44 id_rsa.pub
-rw-r--r--. 1 swati swati  410 Jan 12 15:46 known_hosts 

Assurez-vous également que les autorisations pour le répertoire .ssh sont. C'est aussi important

drwx------.   2 swati swati    4096 May  5 14:56 .ssh
swatisinghi
la source
1
Assurez 750 autorisations sur $ HOME
swatisinghi
Sur ma machine (Fedora 28), la définition de l'autorisation authorized_keyssur 0600 résout le problème, tandis que l'autorisation du .sshrépertoire n'a aucun effet sur le shing localhost
Chang Qian
1

Simplifiez la configuration du serveur

Je pense que vous devrez peut-être désactiver l'authentification par mot de passe. Ceci est un sshd_config que j'utilise

Port 22
Protocol 2
PermitRootLogin no
StrictModes yes
PasswordAuthentication no
ChallengeResponseAuthentication no
MaxStartups 2
AllowUsers peter paul mary
LogLevel VERBOSE

Essayez d'abord quelque chose de minimal, puis ajoutez-le car vous avez besoin de capacités supplémentaires.


Mise à jour:

Vérifier les journaux du serveur

De votre EDIT3, je vois que l'authentification par clé publique échoue avant que le client ne tente l'authentification par mot de passe. Le syslog de votre serveur peut contenir des messages de sshd qui éclairent cela.

Recharger les configurations modifiées

N'oubliez pas de signaler sshdde recharger les modifications de configuration. Par exemplekill -HUP $(cat /etc/sshd.pid)

RedGrittyBrick
la source
Je pense que désactiver l'authentification par mot de passe quand il ne peut même pas entrer sans le mot de passe serait la dernière chose qu'il veut faire (se verrouiller complètement)
Amalgovinus
@Amalgovinus: La question a été largement modifiée depuis que j'ai posté ma réponse initiale. Je suppose que je pourrais supprimer cette réponse.
RedGrittyBrick
0

Concernant le post ci-dessus, face au même problème, je viens de changer de ligne

PasswordAuthentication no

dans le fichier / etc / ssh / sshd_config et cela a fonctionné.

De plus, il vaut peut-être mieux utiliser

service sshd restart

pour recharger les changements de configuration de sshd.

Nicolas
la source
0

Une autre solution pour la fonctionnalité SELinux de Red Hat Enterprise Linux 6.5 empêchant sshd de lire $ HOME / .ssh consiste à utiliser restorecon, voir mon répondeur ici /superuser//a/764020/213743 .

buzz3791
la source
0

Pour moi, c'était aussi simple que

cat id_rsa.pub >> authorized_keys
user695025
la source
0

J'ai eu le même problème, j'ai suivi 3 étapes pour créer le mot de passe sans connexion et cela fonctionne bien

1. ssh-keygen -t rsa
Press enter for each line
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod og-wx ~/.ssh/authorized_keys
Hadi Rahjoo
la source