Ssh auth via private/public key impossible

Bonjour,

J’ai suivi la doc sécurité pour mettre en place une authentifiation ssh par clé, mais j’ai beau essayé divers trucs trouvés dans les forums, je n’arrive pas à faire fonctionner le système. Il n’y a pas de fichier .sshd sur mon /home admin par exemple

Quand j’utilise les commandes suivantes sur le compte admin :

yunohost user ssh add-key <username> <key>
yunohost user ssh remove-key <username> <key>
yunohost user ssh list-keys <username>

j’ai le message d’erreur suivant :

Traceback (most recent call last):
File "/usr/bin/yunohost", line 213, in <module>
timeout=opts.timeout,
File "/usr/lib/python2.7/dist-packages/moulinette/__init__.py", line 136, in cli
moulinette.run(args, output_as=output_as, password=password, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/moulinette/interfaces/cli.py", line 390, in run
ret = self.actionsmap.process(args, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/moulinette/actionsmap.py", line 519, in process
return func(**arguments)
File "/usr/lib/moulinette/yunohost/user.py", line 491, in user_ssh_add_key
return yunohost.ssh.user_ssh_add_key(auth, username, key, comment)
File "/usr/lib/moulinette/yunohost/ssh.py", line 92, in user_ssh_add_key
authorized_keys_file = os.path.join(user["homeDirectory"][0], ".ssh", "authorized_keys")
KeyError: 'homeDirectory'

J’ai vu un sujet similaire, sans réponse malheureusement, sur le forum. Si l’un d’entre vous à une idée ça serait génial :slight_smile:

Merci à vous,

Julien

ai le message d’erreur

Salut,

Je ne maitrise pas le fonctionnement interne de la moulinette Yunohost, du coups je vais pas trop pouvoir t’aider…
Mais juste comme ca : le service ssh est bien en fonctionnement ?

Bonjoue :slight_smile:

Je pense que oui car je peux me connecter avec le mot de passe.
Le problème arrive avec l’identification par clé.

Merci pour ta réponse,

J

L’utilisateur admin est peut être particulier. Est-ce que les commandes indiquées fonctionnent avec un autre utilisateur du serveur?


Suite à la migration 3.4, j’ai eu le même soucis pour me connecter en tant que admin au lieu de root avec une clef ssh. Je me suis même fait bannir par fail2ban suite à trop de mauvaises tentatives.

J’ai pu restaurer l’accès avec les commandes suivantes, je ne sais pas si une manière “plus propre” est prévue par Yunohost pour l’instant. Il faudra attendre un retour officiel.
En cas de doute sur ce que font ces commandes, ne rien faire et attendre un retour!



Modification de l’utilisateur de connexion sur l’ordinateur

➜  ~ cat .ssh/config
[...]

Host cloud nuage
    HostName myAwesomeServerIP
    #User root
    User admin
    IdentityFile ~/.ssh/id_ecdsa

Connexion au serveur en forçant l’utilisation du mot de passe au lieu de la clef ssh

➜  ~ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no cloud -v
admin@myAwesomeServerIP's password: XXX

admin@yunohost:~$ 

admin@yunohost:~$ pwd
/home/admin

admin@yunohost:~$ id
uid=1007(admin) gid=1007 groupes=1007,4001(admins),4002(sftpusers)
admin@yunohost:~$ debug1: client_input_channel_req: channel 0 rtype keepalive@openssh.com reply 1

admin@yunohost:~$ groups 
groups: impossible de trouver le nom pour le GID 1007
1007 admins sftpusers

admin@yunohost:~$ sudo -l
Entrées par défaut pour admin sur yunohost :
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

L'utilisateur admin peut utiliser les commandes suivantes sur yunohost :
    (root) NOPASSWD: ALL




admin@yunohost:~$ ls .ssh
ls: impossible d'accéder à '.ssh': Aucun fichier ou dossier de ce type

admin@yunohost:~$ sudo mkdir .ssh

admin@yunohost:~$ ls -al
total 36
dr-xr-xr-x  3 admin 1007 4096 févr.  3 12:56 .
drwxr-xr-x 18 root  root 4096 nov.   5 01:10 ..
-r--------  1 admin 1007  154 juil.  4  2017 .bash_history
-r--r--r--  1 admin 1007  220 févr.  8  2016 .bash_logout
-r--r--r--  1 admin 1007 3515 févr.  8  2016 .bashrc
lrwxrwxrwx  1 admin 1007    6 févr.  8  2016 media -> /media
-r--r--r--  1 admin 1007  675 févr.  8  2016 .profile
-r--------  1 admin 1007 1024 mars   4  2017 .rnd
drwxr-xr-x  2 root  root 4096 févr.  3 12:56 .ssh
-r--r--r--  1 admin 1007  132 févr.  8  2016 .vimrc




admin@yunohost:~$ sudo chmod 700 .ssh/
admin@yunohost:~$ sudo chown admin:1007 .ssh/
admin@yunohost:~$ ls -al
total 36
dr-xr-xr-x  3 admin 1007 4096 févr.  3 12:56 .
drwxr-xr-x 18 root  root 4096 nov.   5 01:10 ..
-r--------  1 admin 1007  154 juil.  4  2017 .bash_history
-r--r--r--  1 admin 1007  220 févr.  8  2016 .bash_logout
-r--r--r--  1 admin 1007 3515 févr.  8  2016 .bashrc
lrwxrwxrwx  1 admin 1007    6 févr.  8  2016 media -> /media
-r--r--r--  1 admin 1007  675 févr.  8  2016 .profile
-r--------  1 admin 1007 1024 mars   4  2017 .rnd
drwx------  2 admin 1007 4096 févr.  3 12:56 .ssh
-r--r--r--  1 admin 1007  132 févr.  8  2016 .vimrc


admin@yunohost:~$ sudo -i
root@yunohost:~# cat .ssh/authorized_keys2 
ecdsa-sha2-nistp521 XXXXXXXXXXXXXXXXXXXXXXXXXX

root@yunohost:~# cp .ssh/authorized_keys2 /home/admin/.ssh/

root@yunohost:~# ls -al /home/admin/.ssh/
total 12
drwx------ 2 admin 1007 4096 févr.  3 13:00 .
dr-xr-xr-x 3 admin 1007 4096 févr.  3 12:56 ..
-rw-r--r-- 1 root  root  279 févr.  3 13:00 authorized_keys2


admin@yunohost:~$ sudo chown -R admin:1007 .ssh/authorized_keys2
admin@yunohost:~$ ls -al .ssh/
total 12
drwx------ 2 admin 1007 4096 févr.  3 13:00 .
dr-xr-xr-x 3 admin 1007 4096 févr.  3 12:56 ..
-rw-r--r-- 1 admin 1007  279 févr.  3 13:00 authorized_keys2

admin@yunohost:~$ 

Connexion depuis l’ordinateur

➜  ~ ssh cloud

admin@yunohost:~$ echo "Hello there !"
Hello there !

@juer je pense que tu ne t’es j’amais connecté en ssh via le user admin ?
Du coup le dossier utilisateur d’admin n’existe pas.

La commande pour ajouter une clé ssh n’a pas prévu ce cas.

Donc pour moi commence par te connecter via ssh avec password sur le user admin, puis lance ta commande, puis teste de te connecter avec ta clé ssh.

Petite astuce en passant si tu n’a pas encore de clef ssh.
Quand tu genere t’as clef, ajoute l’option -C, celle-ci te permets de rajouter un commentaire à la fin de ta clef ssh publique. c’est assez pratique différencier quand tu as une clef ssh par machine et / ou que vous ếtes plusieurs à acceder au serveur.

Par exemple:

ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"

Salut @ljf.

Merci pour ta réponse. En fait si j’utilise ssh avec le compte admin (via Putty) depuis le début.

J’ai fait la clé avec PuttyGen.

J’ai même crée un dossier .ssh à un moment et recrée une clé avec ssh-keygen mais aucune de ces solutions ne fonctionnent (que ce soit le add key de yunohost, ou directement placer la clé publique dans le bon endroit et se connecter avec la clé privé).

Je vais essayer de voir (1) si ça marche avec un user lambda et (2) si je n’ai pas fait d’autres erreurs ! :slight_smile:

Julien

merci pour l’info :slight_smile:

des nouvelles ? J’ai le meme problème. Je peux me connecter par clés avec l’utilisateur root (oui j’ai désactivé parce que trop contraignant, mais je l’utilise que en local :slight_smile: ) et admin mais pas avec un utilisateur lambda.

-l’utilisateur lambda se connecte bien par mot de passe
-j’ai ajouter l’utilisateur lambda a la config sshd_config ( AllowUsers lambad lamba2 lambda3)
-j’ai fait yunohost ssh allow lambda
-j’ai bien ma clé dans /home/lambda/.ssh/autorized_keys, si je relance ssh-copy-id depuis le client, ca me duplique les clé dans l’hote #weird

des idées ?

je bloque, des idées