SSH sans mot de passe avec un emplacement de fichier d'identité non par défaut

16

Dans le cadre d'un script de démarrage, je dois ouvrir automatiquement plusieurs fenêtres de terminal gnome, l'un de ces terminaux envoie automatiquement:

ssh [email protected]

La limite avec cela est que je dois encore taper un mot de passe pour terminer la connexion SSH.

Ce que je veux faire, c'est que mon script lance la commande et termine la connexion. Dans cette mesure, j'ai essayé de suivre les instructions décrites dans la réponse acceptée ici .

À partir du système à partir duquel je souhaite me connecter, j'ai exécuté:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key

Il m'a ensuite invité à saisir une phrase secrète. Je l'ai laissé vide, car je ne savais pas à quoi il servirait, donc j'ai supposé que le réglage un nécessiterait de le déverrouiller avec ladite phrase secrète chaque fois que je l'utiliserais.

Poursuivant avec les instructions liées ci-dessus, j'ai ensuite couru et reçu ce qui suit:

ssh-copy-id user@IP
ERROR: No identities found

Une recherche rapide a révélé que je devais spécifier l'emplacement de la clé, car elle ne se trouvait pas dans l'emplacement de sauvegarde par défaut, j'ai donc corrigé cela:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub [email protected]

Après avoir demandé le mot de passe du serveur, il a réussi à ajouter la clé. Cependant, en essayant de me connecter avec "ssh user @ IP", j'ai toujours été invité à entrer le mot de passe.

Pour autant que je sache, j'ai suivi correctement les instructions liées, soit il me manque quelque chose, soit une configuration existante m'empêche de faire fonctionner cela?

Les deux systèmes utilisent 18.04 et openssh.

hiigaran
la source
J'ai donc besoin de spécifier l'emplacement du fichier .pub lors de l'envoi de la commande SSH?
hiigaran
J'ai une façon un peu différente d'organiser mes fichiers, d'où les emplacements non par défaut, mais vous avez beaucoup aidé. Merci. N'hésitez pas à en faire une réponse que je peux accepter.
hiigaran

Réponses:

35

Il échoue pour la même raison que ssh-copy-idla première fois - c'est-à-dire parce que vous avez choisi un emplacement non par défaut pour le fichier d'identité.

Vous pouvez le résoudre de la même manière, en ajoutant -i /home/user/ssh/keys/server1keyà votre sshcommande - notez que le côté client a besoin de l'emplacement du fichier de clé privée .

De man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.

Alternativement, vous pouvez créer une ~/.ssh/configentrée de fichier pour l'hôte sur le modèle de

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
tournevis
la source
1
J'ai toujours supposé que le fichier de configuration nécessitait une indentation - je vois que ce n'est pas le cas. Intriguant.
Boris the Spider
Toute personne utilisant OpenSSH devrait avoir un ~/.ssh/config, sinon OpenSSH utilise la valeur par défaut à l'échelle du système /etc/ssh/ssh_config. Au cas où quelqu'un le trouverait utile, j'ai téléchargé un ssh_config pré-construit sur mon GitHub il y a quelque temps comme point de départ pour les utilisateurs qui n'ont peut-être pas le temps de lire la page de
manuel ssh_config
@ JW0914 ce n'est qu'à moitié vrai: les valeurs individuelles dans ~/.ssh/configremplaceront celles du global ssh_config, mais le simple fait d'avoir le fichier ne désactivera pas la configuration à l'échelle du système.
Sebastian Stark
@SebastianStark Vous avez peut-être mal lu mon commentaire, car je n'ai jamais déclaré que cela désactiverait la configuration à l'échelle du système. Ce que j'ai déclaré était exact à 100%.
JW0914
2

Une autre raison qui ssh-copy-idéchoue est que la clé n'a pas été ajoutée à l'agent SSH.

Tout d'abord, vérifiez et démarrez si ssh-agentest en cours d'exécution:

eval "$(ssh-agent -s)"

Si vous obtenez l'ID de processus, vous pouvez ajouter votre clé:

ssh-add -k /home/user/ssh/keys/server1key

Avec -kvous ajoutez la clé au trousseau.

Vérifiez si des clés sont ajoutées avec:

ssh-add -l

ssh-copy-id devrait fonctionner maintenant.

Martijn
la source
-1

J'espère que cela fonctionnera pour vous .. "sshpass -p yourpassword" il se connectera automatiquement à l'hôte distant.

[root @ localhost .ssh] # sshpass -p password123 ssh -l root localhost

JackyChan
la source
-1

Exécutez simplement 2 commandes:

ssh-keygen
ssh-copy-id

Longue réponse:

user@ip:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): temp_file
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in stemp.
Your public key has been saved in stemp.pub.
The key fingerprint is:
SHA256:5**M user@ip
The key's randomart image is:
+---[RSA 2048]----+
|  ...            |
| ...             |
| ..              |
| ..+.    o .     |
|                 |
|    B            |
|                 |
|=      *         |
|=+   o .         |
+----[SHA256]-----+

Puis:

user@ip:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ipDestination -p portDest
Mohsen Abasi
la source