51 votes

Comment mettre en place un accès SSH sans mot de passe pour l'utilisateur root ?

Je dois configurer une machine pour que l'installation d'un logiciel puisse être automatisée à distance via SSH. En suivant le wiki J'ai pu configurer des clés SSH pour que mon utilisateur puisse accéder à la machine sans mot de passe, mais je dois toujours saisir manuellement mon mot de passe lorsque j'utilise la fonction sudo ce qu'un processus automatisé ne devrait manifestement pas avoir à faire.

Bien que mon /etc/ssh/sshd_config a PermitRootLogin yes Je n'arrive pas à me connecter en tant que root, probablement parce qu'il ne s'agit pas d'un "vrai" compte avec un mot de passe distinct.

Comment configurer les clés SSH pour qu'un processus puisse se connecter à distance en tant que root sur Ubuntu ?

68voto

Fergusmac Points 221

Partie 1 : Clé SSH sans mot de passe

Pour mettre en place une connexion SSH sans mot de passe pour l'utilisateur root, vous devez avoir un accès root sur le serveur. La méthode la plus simple consiste à temporairement permettre à root de se connecter via ssh avec un mot de passe. D'une manière ou d'une autre, vous devez disposer d'un accès root sur le serveur pour effectuer cette opération. Si vous n'avez pas d'accès root sur le serveur, contactez l'administrateur du serveur pour obtenir de l'aide.

Sur le client (d'où vous venez en ssh)

Créez d'abord une clé ssh sans mot de passe. Je vous suggère fortement de lui donner un nom plutôt que d'utiliser la clé par défaut.

ssh-keygen -f foo

L'option -f spécifie un nom de fichier, foo est un exemple, utilisez le nom de votre choix.

Lorsque l'on vous demande un mot de passe, appuyez simplement sur la touche "Entrée" et vous obtiendrez une clé sans mot de passe.

Vous devez ensuite transférer la clé sur le serveur. La méthode la plus simple consiste à utiliser ssh-copy-id . Pour ce faire, vous devez temporairement permettre à l'utilisateur root de se connecter au serveur.

Sur le serveur (où vous vous rendez en ssh)

éditer /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

Assurez-vous d'autoriser l'utilisateur root à se connecter en utilisant la syntaxe suivante

PasswordAuthentication yes
PermitRootLogin yes

Redémarrer le serveur

sudo service ssh restart

Définir un mot de passe pour la racine, utiliser un mot de passe fort

sudo passwd

Sur le client :

A partir du client, transférer la clé au serveur

ssh-copy-id -i ~/.ssh/foo root@server

remplacez "foo" par le nom de votre clé et entrez le mot de passe racine de votre serveur lorsque cela vous est demandé.

Tester la clé

ssh -i ~/.ssh/foo root@server

Si cela fonctionne, désactivez le mot de passe de la racine et désactivez la connexion par mot de passe.

Sur le serveur :

sudo passwd -l root

Editar /etc/ssh/sshd_config

sudo nano `/etc/ssh/sshd_config`

Modifier les éléments suivants :

PasswordAuthentication no
PermitRootLogin without-password

Redémarrer le serveur

sudo service ssh restart

Sur le client (Test) :

Vous devriez maintenant pouvoir vous connecter avec votre clé sans mot de passe et vous ne devriez pas pouvoir vous connecter en tant qu'utilisateur sans clé.

ssh -i ~/.ssh/foo root@server

Partie 2 : Exécuter des commandes via sudo sans entrer de mot de passe

Vous configurez sudo pour pouvoir exécuter des commandes sans mot de passe.

La réponse à cette question se trouve à deux endroits :

Des deux, je suggère d'autoriser le moins d'ordres possible (première réponse) plutôt que tous les ordres (deuxième réponse).

8voto

ctrlShiftBryan Points 5620

Vous confondez deux choses différentes :

Le journal sans mot de passe est utilisé pour s'assurer que les personnes ne peuvent pas se connecter à distance à votre système en devinant votre mot de passe. Si vous pouvez vous connecter sans mot de passe à l'aide de ssh nomutilisateur@machine, la configuration est correcte et n'a rien d'autre à voir avec ceci.

sudo est utilisé pour permettre à un compte d'utilisateur normal de faire quelque chose avec des autorisations de super-utilisateur. Ce type d'autorisation fait exigent que l'utilisateur tape son mot de passe. Cela se produit que vous soyez connecté à distance (via SSH sans mot de passe ou protégé par un mot de passe) ou que vous soyez local sur la machine. Vous essayez de définir sudo de ne pas demander votre mot de passe, ce qui n'est pas recommandé, mais vous pouvez apprendre à le faire via une réponse comme https://askubuntu.com/a/74083/6161

Note aux futurs lecteurs de cette réponse :

Ma réponse ci-dessus ne répond pas à la question posée par l'auteur de l'affiche, elle décrit ce que vous faites. devrait faire à la place. Si vous 熟々 souhaitez autoriser les connexions à distance directement au compte root, vous devez activer le compte root (voir mon commentaire ci-dessous). Encore une fois, permettez-moi de dire NE PAS autoriser les connexions à distance à votre compte root.

7voto

Aanokpe Rai Points 131

Q. Se connecter à l'hôte distant en tant qu'utilisateur root en utilisant SSH sans mot de passe (par exemple ssh root@remotehost_ip)

A. Pour se connecter à l'hôte distant en tant qu'utilisateur root à l'aide de SSH sans mot de passe, suivez les étapes suivantes.

1ère étape :
Tout d'abord, vous devez partager la clé publique de l'utilisateur local avec le fichier authorized_keys de l'utilisateur root de l'hôte distant. Il existe de nombreuses façons de le faire, en voici un exemple.

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

Vous pouvez également copier-coller le contenu de votre clé publique dans le fichier authorized_keys de l'utilisateur root de l'hôte distant.

2ème étape :
Configurer ssh pour permettre une connexion sans mot de passe sur un hôte distant. Connectez-vous à l'hôte distant et éditez le fichier /etc/ssh/sshd_config puis redémarrez le service ssh. N'oubliez pas de commenter "PermitRootLogin yes".

#vim /etc/ssh/sshd_config
PermitRootLogin without-password
StrictModes no

#service ssh restart

Commentez #PermitRootLogin oui

3ème étape :
Testez votre connexion depuis votre machine locale en utilisant l'utilisateur dont la clé publique a été partagée précédemment.

$ssh root@remotehost_ip

2voto

Lekensteyn Points 162346

PermitRootLogin contrôle si l'utilisateur nommé "root" (pour être précis : tout utilisateur avec UID 0) est autorisé à se connecter. Si vous vous connectez en tant que root, vous n'avez pas besoin de sudo pour effectuer des tâches privilégiées.

En revanche, si vous vous connectez à un compte d'utilisateur et que vous utilisez la fonction sudo sans mot de passe, vous devez configurer le fichier sudoers sans avoir à manipuler le fichier /etc/ssh/sshd_config . Voir Comment faire en sorte qu'Ubuntu se souvienne à jamais du mot de passe après la première fois ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X