ajout d'un mot de passe à .ssh / config

24

J'utilise Ubuntu 12.04. J'utilise ssh pour me connecter à de nombreux serveurs quotidiennement, donc j'ai mis leurs paramètres dans le fichier .ssh / config ; comme ça :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Existe-t-il un moyen de mettre des mots de passe dans ce fichier, pour chaque connexion? Ainsi, lorsque le serveur demande un mot de passe, le terminal met son laissez-passer et l'envoie au serveur, donc je n'ai pas besoin de taper le mot de passe à chaque fois. De plus, je ne veux pas utiliser de paire de clés publique / privée.

Ajo Augustine
la source
10
C'est à cela que servent les paires de clés.
Michael Hampton

Réponses:

31

Non, il n'existe aucune méthode pour spécifier ou fournir sur la ligne de commande le mot de passe de manière non interactive pour l'authentification ssh à l'aide d'un mécanisme intégré openssh. Du moins pas ce que je sais. Vous pouvez coder en dur votre mot de passe dans le script attendu, mais ce n'est pas non plus une bonne solution.

Vous voudrez certainement utiliser des paires de clés pour l'authentification sans mot de passe comme Michael l'a déclaré, à la fin, la clé privée est à peu près un gros mot de passe dans le fichier.

Danila Ladner
la source
Le truc, c'est que ce sont mes serveurs clients et ils n'autorisent pas la connexion à l'aide de clés. Je suis en train d'écrire un script bash à l'aide de l'attente de connexion à tous les serveurs sur lesquels les informations d'identification sont stockées n prises à partir d'un périphérique de stockage USB. Merci
Ajo Augustine
1
Pas assez sûr. La seule chose à suggérer dans ce script pour verrouiller ce fichier avec des autorisations de fichier difficiles.
Danila Ladner
1
S'ils n'autorisent pas les clés, ils comprennent mal le fonctionnement de ssh - autoriser la connexion par mot de passe vous ouvre aux attaques par dictionnaire, etc. (bien que très, très lentes) - il est presque impossible de faire de même avec une paire de clés privées, et si elles vous craignez que les clés tombent entre de mauvaises mains, vous pouvez crypter par mot de passe la partie privée de la clé afin que vous ayez besoin de deux facteurs pour pouvoir l'utiliser (le mot de passe peut également être mémorisé dans votre trousseau / par votre agent ssh )
Alex Berry
Éduquez vos clients. Expliquez-leur qu'il est préférable de désactiver l'authentification par mot de passe et de n'autoriser que les clés inversées.
Nikita Kipriyanov
20

Pour éviter la chaîne de commentaires: Oui, ce n'est pas sûr (pas même sans doute pas sûr). Je vous recommande fortement de ne le faire que dans une situation de laboratoire sur un réseau isolé ou une situation similaire qui n'implique pas de serveurs de production ou un serveur de production potentiel sans réinitialisation / formatage complet.

Je voulais configurer cela car je ne pense pas que mon commutateur 2950 prend en charge les clés privées / publiques et j'espère à un moment donné acquérir cette connaissance, mais je n'y suis pas encore.

L'utilisation d'un alias et de sshpass peut être accomplie.

  1. Installer sshpass
  2. Modifiez votre fichier .ssh / config pour inclure le nom d'utilisateur comme indiqué dans la question
  3. Ajoutez un alias à votre terminal (j'ai utilisé .bashrc et je le recommanderais contre les paramètres gloabl)
  4. Utilisez un alias pour vous connecter à la cible

Mon exemple d'alias est:

alias ssc='sshpass -pcisco ssh'

Où "cisco" est le mot de passe. Notez qu'il n'y a pas d'espace entre le -p et le mot de passe.

L'utilisation est (référençant la question):

ssc server1

Remarque: Cela répond à la question du titre uniquement pour ceux qui utilisent des moteurs de recherche. Si vous utilisez des serveurs comme l'exemple de question, des paires de clés privées / publiques et non cette réponse doivent être utilisées

DarkSheep
la source
La seule solution de contournement possible, lorsque vous ne pouvez vraiment pas travailler avec des clés pour une raison quelconque.
sjas
Travaux! Impressionnant.
Rahul
Je suggère de remplacer l'alias par un script shell complet; cela donnerait la possibilité de sélectionner dynamiquement le fichier de mot de passe à utiliser en fonction du paramètre hôte.
7heo.tk
On peut très bien mettre un espace entre -p et le mot de passe, comme c'est souvent le cas avec les programmes cli ...
masterxilo
10

Oui, comme mentionné ci-dessus, il n'y a aucun moyen de sauvegarder le mot de passe simplement. Je recommanderais d'utiliser la clé ssh pour l'autorisation.

générez d'abord votre clé:

ssh-keygen

Copiez ensuite la clé sur vos serveurs / postes de travail:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

C'est tout. On ne vous demandera plus jamais le mot de passe.

Je recommande également de supprimer l'autorisation de mot de passe en général, mais cela dépend de vous.

Str82DHeaD
la source
1
Merci pour la référence à ssh-copy-id! J'avais l'habitude d'utiliser des engins comme sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"mais ce programme est plus propre et rend l'intention claire.
masterxilo
3

Il n'y a aucun moyen de le faire avec ssh, c'est aussi peu sûr que possible.

Comme Danila l'a mentionné, vous pouvez utiliser des scripts attendus, mais cela ne me dérangerait pas.

Je me demande ce que vous essayez de réaliser? Voulez-vous passer d'un serveur à un autre? Dans ce cas, vous souhaitez configurer et utiliser ssh-agent sur votre poste de travail et activer le transfert d'agent sur les hôtes cibles; De cette façon, l'échange d'informations d'identification sera acheminé vers votre agent local sans avoir à copier votre clé privée.

Tourbillon
la source
VisualStudio a le concept de jetons d'accès personnels qui sont comme des mots de passe spécifiques à une application où cette fonctionnalité serait utile.
spuder
1

J'utilise ce script depuis le ~/.local/binrépertoire

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Ce qui me permet de spécifier la phrase secrète comme #PS <password>dans le .ssh/configfichier.

Mais, comme tout le monde le dit, il vaut mieux l'utiliser ssh-keysavec ssh-agentquand c'est possible

mnach
la source
0

La bonne façon de gérer cette situation consiste à utiliser un agent ssh basé sur la session. Voici comment:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Le mot de passe sera ensuite maintenu valide pour le reste de la session. Vous n'avez besoin d'exécuter la première commande qu'une seule fois et vous pouvez ajouter autant de clés que vous le souhaitez par la suite. Lorsque la session est interrompue, l'agent l'est également. Il n'y a donc pas de stockage codé en dur d'un mot de passe.

Choqué qu'après si longtemps, cette réponse ne soit pas là!

pranalli
la source
La raison pour laquelle il n'y était pas est probablement que l'affiche a spécifiquement dit qu'il ne voulait pas utiliser de paire de clés publique / privée.
Jenny D dit Réintégrer Monica
1
Cela m'a manqué, merci. Ensuite, j'ajouterai que ne pas utiliser de paire de clés pour SSH est une très, très mauvaise idée. C'est plus sûr ET plus pratique ... J'exhorte le PO à reconsidérer. L'utilisation d'une paire de clés sans phrase secrète est beaucoup plus sûre que l'absence de paire de clés et d'un mot de passe. Mais, idéalement, on utiliserait une paire de clés avec une phrase de passe et utiliser les étapes que j'ai fournies si / quand ils sont dans une session qui nécessite le stockage de leur phrase de passe.
pranalli
-1

Vous pouvez le faire de manière plus sûre en utilisant sshpass

  1. Définissez votre mot de passe sans historique

    export PS = your_password ; history -d $ (history 1)

  2. Définissez l'alias d'hôte comme ci-dessus dans ~ / .ssh / config

  3. Utilisez ssh pass pour utiliser la variable d'environnement et connectez-vous à la machine requise en une seule commande

sshpass -p $ PS ssh host_alias

Votre environnement contient votre mot de passe et il est risqué que tout script en cours d'exécution puisse divulguer ce mot de passe si vous ne savez pas ce que vous exécutez

ashishWaghmare
la source
Non, ce n'est pas sûr. Et c'est assez moche.
7heo.tk
Cette "solution" n'est-elle pas plus longue que le problème? Toutes ces étapes supplémentaires, et vous devez toujours tapersshpass -p $PS ...
Dan H