web-dev-qa-db-fra.com

Cache le mot de passe si les clés SSH sont interdites

J'ai un serveur auquel je dois accéder fréquemment via ssh, car je calcule dessus. Maintenant, le centre informatique interdit explicitement les clés SSH car elles sont "peu sûres". Ils estiment que taper mon mot de passe, sur un clavier, à chaque fois, possible devant d'autres humains, est un moyen beaucoup plus sûr de se connecter.

À présent; Je ne peux pas changer d'avis (j'ai essayé).

Existe-t-il un moyen de stocker au moins temporairement les mots de passe SSH, de la même manière que GIT peut stocker les mots de passe dans une mémoire cache pendant un temps défini?

44
user2667180

Réutilisation de la connexion

SSHv2 permet à la même connexion authentifiée d'établir plusieurs «canaux» - shell interactif, commande par lots, SFTP, ainsi que les autres, tels que le transfert d'agent ou le transfert TCP. Votre serveur prend probablement en charge le multiplexage de connexion par défaut. (Si vos administrateurs se plaignent, ce n'est pas la mise en cache de votre mot de passe, mais la connexion complète.)

Avec OpenSSH, vous avez les options ControlMaster et ControlPath (-M et -S) pour utiliser ceci:

  1. Établissez une connexion SSH "principale" à l'aide de -M. (Comme vous n'avez pas encore de chemin de contrôle dans votre configuration, vous devez le spécifier en ligne de commande à l'aide de -S. Il doit durer longtemps, donc j'ajoute les options -fN pour passer en arrière-plan; elles sont techniquement facultatives sinon.)

    $ ssh [email protected] -fNMS ~/.ssh/bar.socket
    [email protected]'s password:
    

    Vous êtes de retour chez Shell.

  2. Commencez une nouvelle connexion via le maître:

    $ ssh [email protected] -S ~/.ssh/bar.socket
    

    Vous êtes dans.

  3. Pour que cela soit utile pour Git/rsync/SFTP, vous devez configurer ControlPath dans votre configuration, car vous ne pourrez pas spécifier -S tout le temps:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
    

Vous pouvez automatiser cela - les versions récentes d'OpenSSH ont également ControlPersist qui établit automatiquement une connexion principale en arrière-plan s'il n'en existe pas encore. Cela vous permet de sauter l'étape 1 et d'utiliser simplement ssh comme vous le feriez normalement.

  1. Configuration dans ~/.ssh/config:

    Host *
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlMaster auto
        ControlPersist 15m
    
  2. La première connexion demande le mot de passe:

    $ ssh [email protected]
    [email protected]'s password:
    [foo@bar:~]$ exit
    
  3. La seconde ne:

    $ ssh [email protected]
    [foo@bar:~]$ yay
    

Pour contrôler le maître multiplexé (l’arrêter ou configurer les transferts TCP,), utilisez l’option -O.

Une méthode similaire est supportée par versions récentes de PuTTY .

62
grawity

Utilisez sshpass

sshpass ( github , man page ) est un outil qui fournit automatiquement le mot de passe à ssh. La manière sécurisée de l'utiliser est la suivante:

% echo 'correct horse battery staple' > ~/.ssh/compute_password
% chmod go-rw ~/.ssh/compute_password

% sshpass -f ~/.ssh/compute_password ssh foo@Host

Cela lira le mot de passe à partir de ~/.ssh/compute_password, un peu comme un fichier de clé privée sans phrase secrète. Vous pouvez placer la commande sshpass dans un petit script Shell ou dans un alias de shell pour éviter de taper cette commande complète. Malheureusement, je n'ai pas trouvé le moyen de faire cela à partir de ~/.ssh/config.

(Il est également possible de spécifier le mot de passe directement sur la ligne de commande à sshpass, mais cela devrait être évité, car le mot de passe sera divulgué à quiconque peut faire ps

Comparaison avec d'autres méthodes

Cette approche est bien sûr moins sécurisée que l’authentification par clé publique correctement configurée, mais vous le savez probablement déjà.

Il est également moins sécurisé que la réponse de @ grawity sur la réutilisation de la connexion, mais présente l’avantage de ne pas avoir à entrer le mot de passe de manière interactive.

Vous pouvez envisager la réponse de @ grawity comme une alternative à l’authentification pubkey avec une phrase secrète et la mise en cache de la clé privée (c.-à-d. ssh-agent). Alors ma réponse serait une alternative à l'authentification de pubkey sans phrase secrète sur le fichier de clé privée.

19
marcelm

Utilisez le gestionnaire de mot de passe.

Certains gestionnaires de mots de passe (ex. KeePassXC) disposent de la fonctionnalité de "saisie automatique". Vous stockez le mot de passe sur le gestionnaire de mots de passe, déverrouillez la base de données lorsque vous exécutez le gestionnaire et chaque fois que ssh vous invite à entrer votre mot de passe, vous appuyez sur une combinaison de touches permettant au gestionnaire de mots de passe d'écrire votre mot de passe long sur la console.

Pas besoin de copier, rappelez-vous de tout (sauf le mot de passe pour déverrouiller la base de données) et vous pouvez avoir un mot de passe fort sans écraser ces 30 caractères à chaque fois que vous essayez de vous connecter.

Vous pouvez choisir votre favori dans cette liste: https://en.wikipedia.org/wiki/List_of_password_managers

1
styrofoam fly

Une autre alternative consiste à utiliser un client ssh à interface graphique. Sous Windows, le choix évident serait PuTTY . Il existe également une version Linux de PuTTY, notamment la plupart des distributions basées sur Debian comme Ubuntu incluent normalement PuTTY dans leur dépôt.

Un autre très bon client est Termius . Il prend en charge non seulement Windows et Linux, mais également OSX, iOS et Android. Bien que conçue principalement pour les téléphones, la version de bureau est en fait assez bonne.

Si je ne me trompe pas, le vénérable Hyperterminal de Windows a également un client ssh intégré, mais je n’ai pas utilisé Windows depuis très longtemps et je n’en suis donc pas tout à fait certain.

Tous les clients de l'interface graphique incluent la possibilité d'enregistrer les paramètres de connexion, y compris votre nom d'utilisateur et votre mot de passe.

0
slebetman