Question Comment configurer une connexion SSH sans mot de passe?


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?

226
2018-06-04 17:24


origine


Utilisez-vous openssh? (si c'est facile;)) - Rinzwind
@Rinzwind, Pourquoi devrais-je prendre la version propriétaire lorsque OpenSSH est déjà préinstallé? - Oxwivi
J'essaie de ne pas faire des suppositions;) - Rinzwind
Notez que cela est considéré comme une mauvaise pratique de sécurité, et certaines distributions le désactivent par défaut. Je ne suis pas certain, mais il est possible que vous deviez activer PermitRootLogin dans /etc/ssh/sshd_config afin de faire ce travail. - Kevin
@Kevin, s'il vous plaît clarifiez-vous. Nous parlons de ssh-ing sans mot de passe, qui est généralement un bonnes pratiques. Voulez-vous dire ssh-ing dans un shell racine? Ce n'est pas couvert par cette question. - Oxwivi


Réponses:


Répondre

Exécutez cette commande:

ssh-keygen

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

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

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

ssh user@host

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

Exemple

not-marco@rinzwind-desktop:~$ 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 not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", 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 pouvez déjà vous connecter à votre serveur via SSH.

Vous devrez générer un SSH Keypair 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 cela peut être laissé vide pour permettre un accès SSH totalement sans mot de passe.

  1. Commencez par créer votre SSH Keypair en exécutant ssh-keygen cela va créer un id_rsa et id_rsa.pub fichier. le pub fichier est ce qui se passe sur les serveurs, la clé privée (id_rsa) est ce qui reste avec vous et comment vous vous identifiez.
  2. Ensuite, copiez la clé publique sur votre serveur avec ssh-copy-id user@server remplacer l'utilisateur par votre utilisateur distant et votre serveur par le nom DNS ou l'adresse IP de la machine. Il demandera votre mot de passe SSH, entrez-le et si tout se termine avec succès, vous pourrez accéder à la machine via ssh user@server sans avoir besoin d'un mot de passe.

Les références


231
2018-06-04 17:36



@Oxwivi cette réponse est la manière la plus correcte de le faire - mais cela semble plus long. Tout ce que vous devez faire est de taper ssh-keygen suivez les instructions à l'écran, puis tapez ssh-copy-id user@server remplacer l'utilisateur par votre utilisateur distant et votre serveur par la machine distante - Marco Ceppi♦
J'ai eu cette erreur "Agent a reconnu le défaut de signer en utilisant la clé." à chaque fois que vous essayez de vous connecter après avoir suivi cette procédure. La solution consistait à exécuter "> ssh-add" sur la machine locale et maintenant je peux me connecter à la machine distante comme prévu. - jmbouffard
Cela vaut la peine de mentionner que si vous devez utiliser un port personnalisé pour @server, vous devez le faire avec: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
@Rinzwind: Cela signifie-t-il que je ne peux jamais m'authentifier à partir d'un client / ordinateur inconnu sur mon serveur si je désactive l'authentification par mot de passe et n'autorise que l'authentification par clé. Existe-t-il un moyen d'autoriser la connexion à partir d'une machine inconnue à l'aide de la clé privée générée pour que le client connu / configuré communique avec le serveur? Je veux dire, cette clé privée est-elle portable et pourrait-elle être utilisée pour s’authentifier sur un serveur à partir d’autres machines, en cas de besoin urgent? - Rajat Gupta
Mais le serveur demande toujours le mot de passe ,,, - lerner


Tapez les commandes suivantes:

  1. ssh-keygen 

    presse Entrer clé jusqu'à ce que vous obtenez l'invite

  2. ssh-copy-id -i root@ip_address

    (Il faudra une fois demander le mot de passe du système hôte)

  3. ssh root@ip_address

Vous devriez maintenant pouvoir vous connecter sans mot de passe.


30
2018-05-17 08:45





La façon dont je le fais habituellement est la suivante:

ssh-keygen -t rsa

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

Alors: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Cela nécessite que le dossier .ssh soit dans le répertoire personnel du nom d'hôte ciblé, avec le fichier authorized_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, il suffit de SSH dans cette boîte comme vous en avez l'habitude.


21
2018-06-04 18:22



Que dire de la touch et chmod commande dans la réponse de Rinzwind? - Oxwivi
Vous devrez chmod le .ssh/authorized_keys fichier à 0600 ou cela ne fonctionnera pas - Marco Ceppi♦
Cela m'a beaucoup aidé car je ne pouvais pas utiliser ssh-copy-id pour root sur mon serveur. il doit être root dans le cas où backuppc (ou tout autre démon) doit ssh sur une autre machine. - Adam


J'utilise normalement sshpass pour cela, installez-le avec sudo apt-get install sshpass et l'utiliser comme ça

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Pourquoi ne pas utiliser les clés ssh? - enzotib
Ce n'est pas une situation "pourquoi pas", il fonctionne toujours parfaitement sans ajouter de clés, c'est juste une autre méthode que je dirais. - Bruno Pereira
Merci pour les informations sur sshpass, jamais entendu parler avant. - Panther
Les clés SSH sont la réponse "correcte" à la question, mais sshpass est un hack très utile dans les cas où vous ne pouvez pas changer la méthode d'authentification sur le serveur distant! - Jacob Krall
C'est très dangereux, vous garderez dans bash_history ou quels que soient les mots de passe simples des hôtes auxquels vous vous connectez. - kappa


Cette solution s'adresse spécifiquement aux utilisateurs utilisant les fenêtres à ssh dans leurs machines à distance, y compris des images de nuages ​​sur AWS Cloud et GCE Cloud


9
2017-11-20 09:07





Désactiver l'authentification par mot de passe

Parce que beaucoup de gens avec des serveurs SSH utilisent des mots de passe faibles, beaucoup   les attaquants en ligne chercheront un serveur SSH, puis commenceront à deviner   mots de passe au hasard. Un attaquant peut essayer des milliers de mots de passe dans un   heure, et devinez même le mot de passe le plus fort donné suffisamment de temps. le   La solution recommandée consiste à utiliser des clés SSH au lieu de mots de passe. Être comme   difficile à deviner comme une clé SSH normale, un mot de passe devrait contenir   634 lettres et chiffres aléatoires. Si vous pouvez toujours vous connecter à   votre ordinateur avec une clé SSH, vous devez désactiver le mot de passe   authentification totale.

Si vous désactivez l’authentification par mot de passe, vous ne pourrez   connectez-vous depuis les ordinateurs que vous avez spécifiquement approuvés. Ce massivement   améliore votre sécurité, mais vous empêche de vous connecter à   votre propre ordinateur à partir du PC d'un ami sans pré-approuver le PC, ou   de votre propre ordinateur portable lorsque vous supprimez accidentellement votre clé.

Il est recommandé de désactiver l’authentification par mot de passe, sauf si vous avez un   raison spécifique de ne pas le faire.

Pour désactiver l'authentification par mot de passe, recherchez la ligne suivante dans   votre fichier sshd_config:

#PasswordAuthentication yes

remplacez-le par une ligne qui ressemble à ceci:

PasswordAuthentication no

Une fois que vous avez enregistré le fichier et redémarré votre serveur SSH, vous   ne devrait même pas être demandé un mot de passe lorsque vous vous connectez

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



C'est la réponse correcte la plus fondamentale mais bonne pour la sécurité! Désactivez également la connexion root est une autre bonne - FreeSoftwareServers
Est-ce que PasswordAuthentication no affecter tous les utilisateurs? Si non, comment puis-je le désactiver pour les utilisateurs normaux mais le laisser inchangé pour root pendant que je le teste? Je ne veux pas vraiment le faire et m'enfermer complètement. - Adam
Gardez une session ssh ouverte pour pouvoir la changer. Vous voulez désactiver les mots de passe ET root. Oui, vous pouvez le fubar Ne pas;) - Thufir
Pendant ssh, j'ai une erreur Permission denied (publickey). avec PasswordAuthentication no. Que dois-je faire? Est-ce que je change PasswordAuthentication no sur un autre hôte? - ParisaN


Si vous créez une paire de clés publique / particulière et que vous vous connectez à l'aide de notre nouvelle clé publique, vous n'avez pas besoin de saisir votre mot de passe. Selon la configuration de votre clavier 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 comment faires pour vous Il est d'une importance cruciale pour la sécurité de cette méthode, que la clé privée générée reste privée! Vous ne devriez jamais le partager avec qui que ce soit ou en permettre l'accès à quelque titre que ce soit.

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

ssh-keygen -b 4096

Dans ~/.ssh/ vous trouverez votre clé publique comme id_rsa.pub. Son contenu doit être ajouté à vos serveurs authorized_keys fichier en le transportant via un média transportable (clé USB) ou en autorisant brièvement l’authentification par mot de passe sur le serveur, puis en utilisant ssh-copy-id ~/.ssh/id_rsa.pub username@server puis le désactiver à 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 Ubuntu pour sécuriser ce pharse localement afin de ne pas avoir à le taper tout le temps.


4
2018-06-04 17:32





Connexion à distance / copie sans mot de passe

Les applications ssh et scp pour la connexion à distance et la copie à distance, respectivement, vous pouvez 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 entendons la machine sur laquelle vous êtes assis et par serveur, nous entendons la machine sur laquelle vous souhaitez 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 ordinateur. Ceux-ci sont stockés dans des fichiers dans $HOME/.ssh.
  2. Ajouter 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. SSH version de protocole 1, RSA1: c'est le choix par défaut et les résultats dans l'identité des fichiers (clé privée, devrait prendre chmod 0700 pour s'assurer que ce fichier n'est pas lisible pour les autres) et identité.pub (Clé publique).
  2. SSH version de protocole 1, RSA: ceci est obtenu en cours d'exécution ssh-keygen -t rsa et résultats dans des fichiers id_rsa (clé privée) et id_rsa.pub (Clé publique)
  3. SSH version de protocole 1, DSA: ceci est obtenu en cours d'exécution ssh-keygen -t dsa et résultats dans des 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 donnez pas de phrase secrète). Cela rend l'ensemble de l'installation simple, mais aussi peu sûr.

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

Protocol 1,2

Cela fait ssh essayer un RSA1 (version du protocole 1) connexion avant RSA / DSA (version du protocole 2).

Utiliser les clés RSA1

remote=user@remotehost   # 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 de clés DSA

remote=user@remotehost   # 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 comme options à ssh). Bien entendu, la procédure peut être répétée pour toute machine sur laquelle vous souhaitez vous connecter.

Si vous avez utilisé un mot de passe, vous devrez exécuter le programme ssh-agent pour démarrer un shell spécial, suivi de ssh-add enregistrer votre clé / mot de passe combinaison avec sshd. Consultez les pages de manuel relatives à 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 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost 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é de: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27





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
    

trouver plus ici: https://github.com/beautifulcode/ssh-copy-id-for-OSX

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

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

Notez que les citations sont nécessaires.


2
2017-09-14 12:14