Comment puis-je configurer une connexion SSH sans mot de passe?

230

Je veux pouvoir me connecter à une télécommande via ssh sans avoir à entrer le mot de passe tout le temps.

  • Comment puis-je le configurer?
  • Une commande différente est-elle requise pour exécuter une session sans mot de passe?
posée Oxwivi 04.06.2011 - 19:24
la source

10 réponses

237

Répondre

Exécutez cette commande:

ssh-keygen

Ensuite, vous devrez copier la nouvelle clé de votre serveur :

ssh-copy-id [email protected]
## or if your server uses custom port no:
ssh-copy-id "[email protected] -p 1234"

Une fois la clé copiée, ssh dans la machine normalement:

ssh [email protected]

Vous pouvez maintenant vous connecter sans saisir de mot de passe de la machine sur laquelle vous avez exécuté les commandes.

Exemple

[email protected]:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

[email protected]:~$ ssh-copy-id [email protected]
[email protected]'s password: 
Now try logging into the machine, with "ssh '[email protected]'", and check in:

  ~/.ssh/authorized_keys

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

Explication

Cela suppose que vous puissiez déjà vous connecter à votre serveur via SSH.

Vous aurez besoin de générer une paire de clés SSH qui vous permettra de vous identifier comme vous-même sans utiliser de mot de passe. Vous pouvez choisir de protéger les clés avec un mot de passe si vous le souhaitez, mais vous pouvez laisser ce champ vide pour permettre un accès SSH sans mot de passe.

  1. Créez d'abord votre paire de clés SSH en exécutant ssh-keygen . Cela créera un fichier id_rsa et id_rsa.pub . Le fichier pub correspond à ce qui se passe sur les serveurs, la clé privée ( id_rsa ) reste ce qui vous reste à vous et est la façon dont vous vous identifiez.
  2. Copiez ensuite la clé publique sur votre serveur avec ssh-copy-id [email protected] en remplaçant l'utilisateur par votre utilisateur distant et par le serveur avec le nom DNS ou l'adresse IP de la machine. Il vous demandera votre mot de passe SSH, entrez-le et si tout est terminé, vous pourrez accéder à la machine via ssh [email protected] sans avoir besoin d'un mot de passe.

Références

  • lien
réponse donnée Rinzwind 04.06.2011 - 19:36
la source
32

Tapez les commandes suivantes:

  1. ssh-keygen

    Appuyez sur la touche Entrée jusqu'à ce que vous obteniez l'invite

    .
  2. ssh-copy-id -i [email protected]_address

    (Il vous sera demandé une fois le mot de passe du système hôte)

  3. ssh [email protected]_address

Vous devriez maintenant pouvoir vous connecter sans mot de passe.

    
réponse donnée Ravindra 17.05.2013 - 10:45
la source
21

La procédure habituelle est la suivante:

ssh-keygen -t rsa

(Lorsque vous êtes invité à entrer un mot de passe, laissez-le vide)

Ensuite: cat ~/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'

(Cela nécessite que le dossier .ssh se trouve dans le répertoire de base du nom d'hôte ciblé, avec le fichierkeeko authorised_keys)

Bien sûr, remplacez le nom d'utilisateur par le nom d'utilisateur souhaité et le nom d'hôte par le nom d'hôte ou l'adresse IP souhaité

Après cela, utilisez simplement SSH dans cette boîte, comme vous en avez l'habitude.

    
réponse donnée kyentei 04.06.2011 - 20:22
la source
18

J'utilise normalement sshpass pour cela, je l'installe avec sudo apt-get install sshpass et je l'utilise comme ceci

sshpass -p 'password' ssh [email protected]_server
    
réponse donnée Bruno Pereira 06.12.2011 - 18:26
la source
9

Cette solution est spécialement conçue pour les utilisateurs utilisant Windows de ssh dans leurs ordinateurs distants, notamment les images en nuage sur AWS Cloud et . > GCE Cloud

Clause de non-responsabilité

Récemment utilisé cette solution pour la connexion à distance de nouvelles images VM déployées sur GCE.

Outils utilisés:

  1. puttygen téléchargement de puttygen
  2. winscp téléchargement de winscp

Étapes à suivre:

  1. Générer une paire de clés publique / privée à l'aide de puttygen.
  2. Téléchargez la clé publique sur votre serveur en nuage ou à distance.

Comment faire:

1. Générez une clé / paire ou utilisez une clé privée existante

Si vous possédez une clé privée:

Ouvrez puttygen , appuyez sur le bouton Charger et sélectionnez votre fichier de clé privée ( *.pem ).

Si vous ne possédez pas de clé privée:

  • Ouvrez puttygen ,
  • Sélectionnez le type de clé souhaité SSH2 DSA (vous pouvez utiliser RSA ou DSA) dans la section Paramètres . Il est important de laisser le champ de la phrase secrète vide.
  • Appuyez sur générer et suivez les instructions pour générer une paire de clés (publique / privée).

(delasource1,liendonnéci-dessous)

2.Créezunnouveaufichier'authorised_keys'(avecnotepad)

Copiezvosdonnéesdeclépubliqueàpartirdelasection"Clé publique pour le collage dans le fichier OpenSSH registered_keys" du générateur de clé PuTTY, puis collez les données de clé dans le fichier authorized_keys .

Assurez-vous qu'il n'y a qu'une seule ligne de texte dans ce fichier.

3. Télécharger la clé sur le serveur Linux

  • Ouvrez WinSCP,
  • Sélectionnez le protocole de fichier SFTP et connectez-vous avec vos informations d'identification ssh.
  • En cas de succès, la structure du répertoire de base apparaît sur votre ordinateur distant.

Téléchargez le fichier registered_keys dans le répertoire de base de la machine distante.

4. Définissez les autorisations appropriées

Créer le répertoire .ssh (s'il n'existe pas)

Copiez le fichier authorized_keys dans le répertoire .ssh .
(cela remplacera tout fichier authorized_keys existant, prenez-en note).

Si le fichier existait, ajoutez simplement le contenu de ce fichier au fichier existant.

Exécuter des commandes pour définir des autorisations:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

Vous pourrez maintenant ssh sur une machine distante sans entrer les informations d'identification à chaque fois.

Lectures supplémentaires:

réponse donnée devprashant 20.11.2015 - 10:07
la source
7

Disable Password Authentication

Because a lot of people with SSH servers use weak passwords, many online attackers will look for an SSH server, then start guessing passwords at random. An attacker can try thousands of passwords in an hour, and guess even the strongest password given enough time. The recommended solution is to use SSH keys instead of passwords. To be as hard to guess as a normal SSH key, a password would have to contain 634 random letters and numbers. If you'll always be able to log in to your computer with an SSH key, you should disable password authentication altogether.

If you disable password authentication, it will only be possible to connect from computers you have specifically approved. This massively improves your security, but makes it impossible for you to connect to your own computer from a friend's PC without pre-approving the PC, or from your own laptop when you accidentally delete your key.

It's recommended to disable password authentication unless you have a specific reason not to.

To disable password authentication, look for the following line in your sshd_config file:

#PasswordAuthentication yes

replace it with a line that looks like this:

PasswordAuthentication no

Once you have saved the file and restarted your SSH server, you shouldn't even be asked for a password when you log in.

lien

    
réponse donnée Thufir 15.02.2015 - 02:10
la source
4

Si vous créez une paire de clés publique / privée et vous vous connectez à l'aide de notre clé publique nouvellement créée, vous n'avez pas besoin de saisir votre mot de passe. Selon la configuration de votre porte-clés et / ou de votre agent ssh, vous devrez peut-être protéger votre clé avec une phrase secrète.

Voici l'un des nombreux bref guide pour vous. Pour la sécurité de cette méthode, il est d’une importance cruciale que la clé privée générée reste privée! Vous ne devez jamais le partager avec qui que ce soit ni en permettre l'accès sous quelque prétexte que ce soit.

Cette commande génère une clé raisonnablement strong dans ~/.ssh/ :

ssh-keygen -b 4096

Dans ~/.ssh/ , vous trouverez votre clé publique sous la forme id_rsa.pub . Son contenu doit être ajouté à votre fichier de serveurs authorized_keys en le transportant via un support transportable (clé USB) ou en activant brièvement l'authentification par mot de passe sur le serveur, puis en utilisant ssh-copy-id ~/.ssh/id_rsa.pub [email protected] et en le désactivant à nouveau.

Si vous avez choisi de sécuriser votre clé avec une phrase secrète (dans la première étape), vous pouvez utiliser ssh-agent ou le trousseau de clés Ubuntu pour sécuriser ce fichier localement afin de ne pas avoir à le saisir tout le temps.

    
réponse donnée con-f-use 04.06.2011 - 19:32
la source
3

Connexion / copie à distance sans mot de passe

Les applications ssh et scp pour la connexion à distance et la copie à distance, respectivement, vous permettent de communiquer avec un hôte distant sans donner de mot de passe. Cela nécessite que vous suiviez une procédure d'authentification telle que celle décrite ci-dessous. Par client, nous voulons dire la machine sur laquelle vous êtes assis et par serveur, nous voulons dire la machine à laquelle vous voulez vous connecter sans donner de mot de passe. Les étapes de la procédure d'authentification sont les suivantes:

  1. Exécutez ssh-keygen pour générer des clés privées et publiques, à moins que cela ne soit déjà fait sur votre machine. Ceux-ci sont stockés dans des fichiers dans $HOME/.ssh .
  2. Ajoutez le contenu du fichier de clé publique au fichier $HOME/.ssh/authorized_keys ou $HOME/.ssh/authorized_keys2 sur le serveur.

Il existe trois types différents de protocoles d'authentification. Vous spécifiez le type lors de l'exécution de ssh-keygen:

  1. Protocole SSH version 1, RSA1: il s'agit du choix par défaut. Il en résulte une identité de fichier (clé privée, il faut prendre chmod 0700 pour que ce fichier ne soit pas lisible par d'autres. ) et identity.pub (clé publique).
  2. SSH version 1 du protocole, RSA : elle est obtenue en exécutant ssh-keygen -t rsa et donne les fichiers id_rsa (clé privée) et id_rsa.pub (clé publique)
  3. Protocole SSH version 1, DSA : cela est obtenu en exécutant ssh-keygen -t dsa et les fichiers id_dsa (clé privée) et id_dsa.pub (clé publique)

Lorsque vous exécutez ssh-keygen, vous pouvez vous fier aux réponses par défaut (ce qui implique que vous ne fournissez pas de phrase secrète). Cela simplifie l’ensemble de la configuration, mais est également source d’insécurité.

Vous pouvez spécifier le type de clé à utiliser par une option pour ssh ; ssh -1 force l'utilisation des clés RSA1 (version 1 du protocole), alors que ssh -2 force ssh à essayer RSA ou DSA uniquement (version de protocole 2). Dans les exemples ci-dessous, nous générons et installons les clés RSA1 et DSA sur l'hôte distant de manière à disposer de davantage de la flexibilité. Vous pouvez créer un fichier de configuration dans votre répertoire .ssh avec la ligne

Protocol 1,2

Cela fait que ssh tente une connexion RSA1 (version de protocole 1) avant RSA / DSA (version 2 du protocole).

Utilisation des clés RSA1

[email protected]   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

Utilisation des clés DSA

[email protected]   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

C’est tout ce que vous avez à faire si vous n’avez pas utilisé de phrase de passe lors de la génération des clés. Vous pouvez tester la connexion en exécutant ssh $ remote et voir si vous pouvez vous connecter sans donner de mot de passe (vous devrez peut-être utiliser -1 ou -2 en tant qu'options pour ssh ). La procédure peut bien entendu être répétée pour tout ordinateur auquel vous souhaitez vous connecter.

Si vous avez utilisé une phrase secrète, vous devrez exécuter le programme ssh-agent pour démarrer un shell spécial, suivi de ssh-add pour enregistrer votre clé / phrase secrète combinaison avec sshd . Reportez-vous aux pages de manuel de ces programmes pour plus d'informations.

Un script pour automatiser les connexions sans mot de passe: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 [email protected]
  exit
fi
remote="$1"  # 1st command-line argument is the [email protected] address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

copié à partir de: lien

    
réponse donnée αғsнιη 14.09.2014 - 10:27
la source
2

Pour faire quelques ajouts:

  • Mac par défaut n'a pas ssh-copy-id , vous devrez l'installer vous-même:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

trouvez-en plus ici: link

  • si vous avez effectué un transfert de port, la commande devrait ressembler à ceci:

    ssh-copy-id "[email protected] -p 2222"
    

notez que les guillemets sont nécessaires.

    
réponse donnée samluthebrave 14.09.2013 - 14:14
la source
1

J'aimerais ajouter une réponse à ceux qui pourraient trouver qu'ils devraient entrer le mot de passe même s'ils ont lu toutes les réponses ici parce que vous avez défini IdentitiesOnly sur yes. Et la réponse ici peut vous faire gagner beaucoup de temps pour gérer plusieurs clés, clés pour git ou serveur.

Après avoir généré la clé et l'avoir copiée sur le serveur:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub [email protected]

J'ai trouvé que cela ne fonctionnait pas.

Ensuite, je suis allé vérifier le fichier ~/.ssh/config sur le client. J'ai vu ceci en bas:

Host *
IdentitiesOnly yes

Puis j'ajoute ceci ci-dessus:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Je peux simplement me connecter en entrant ssh somename .

Ensuite, vous pouvez ajouter plusieurs clés ssh en utilisant vos noms préférés. Il vous suffit d'ajouter les paramètres tels que les quatre lignes ci-dessus au fichier de configuration.

Host est le nom que vous souhaitez entrer lorsque vous vous connectez au serveur ultérieurement. le nom d'hôte est l'adresse IP du serveur; Utilisateur est le nom d'utilisateur que vous connectez au serveur. et le fichier d'identité est le fichier dans lequel vous stockez la clé que vous avez générée.

    
réponse donnée lerner 24.01.2018 - 10:08
la source

Lire d'autres questions sur les étiquettes