49 votes

Mise en cache du mot de passe si les clés SSH sont interdites

J'ai un serveur auquel je dois accéder fréquemment via ssh, car j'y fais des calculs. Or, le centre de calcul interdit explicitement les clés SSH parce qu'elles ne sont pas "sûres". Ils pensent que taper mon mot de passe, sur un clavier, à chaque fois, si possible devant d'autres humains, est un moyen bien plus sûr de se connecter.

Maintenant, je ne peux pas les faire 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 un cache pour une durée définie ?

65voto

James Mertz Points 390

Réutilisation des connexions

SSHv2 permet à la même connexion authentifiée d'établir plusieurs "canaux" - Shell interactif, commande batch, SFTP, ainsi que des canaux secondaires tels que le transfert d'agent ou le transfert TCP. Votre serveur prend probablement en charge le multiplexage des connexions par défaut. (Si vos administrateurs se plaignent, ce n'est pas votre mot de passe qui est mis en cache quelque part, mais l'ensemble de la connexion).

Avec OpenSSH, vous avez ControlMaster y ControlPath (-M et -S) pour l'utiliser :

  1. Démarrer une connexion SSH "maître" en utilisant -M . (Comme vous n'avez pas encore de ControlPath dans votre configuration, vous devez le spécifier en ligne de commande en utilisant -S . Il faut qu'il vive longtemps, alors j'ajoute le -fN pour passer en arrière-plan ; dans le cas contraire, elles sont techniquement facultatives).

    $ ssh foo@bar.example.com -fNMS ~/.ssh/bar.socket
    foo@bar.example.com's password:

    Vous êtes de retour au Shell local.

  2. Commencez une nouvelle connexion par l'intermédiaire du maître :

    $ ssh foo@bar.example.com -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 cette opération - les versions récentes d'OpenSSH disposent également de la fonction ControlPersist qui établit automatiquement une connexion maître en arrière-plan s'il n'y en a pas encore. Cela vous permet de sauter l'étape 1 et d'utiliser simplement ssh comme vous le feriez normalement.

  1. Configuration en ~/.ssh/config :

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

    $ ssh foo@bar.example.com
    foo@bar.example.com's password:
    [foo@bar:~]$ exit
  3. Le second ne le fait pas :

    $ ssh foo@bar.example.com
    [foo@bar:~]$ yay

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

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

19voto

moklys Points 1

使用する sshpass

sshpass ( github , page de manuel ) est un outil qui fournit automatiquement le mot de passe à ssh. La façon la plus sûre 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

Cette opération permet de lire le mot de passe à partir de ~/.ssh/compute_password comme un fichier de clé privée sans phrase de passe. Vous pouvez mettre le fichier sshpass dans un petit Shell Shell ou un alias Shell pour éviter de taper la commande complète. Malheureusement, je n'ai pas trouvé de 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 est divulgué à quiconque peut le faire. ps )

Comparaison avec d'autres méthodes

Cette approche est bien sûr moins sûre qu'une authentification par clé publique correctement mise en place, mais vous le savez probablement déjà.

C'est également moins sûr que la réponse de @grawity concernant la réutilisation de la connexion, mais cela présente l'avantage de ne pas avoir à saisir le mot de passe de manière interactive.

Vous pouvez considérer la réponse de @grawity comme une alternative à l'authentification par clé publique avec une phrase de passe et la mise en cache de la clé privée (c.-à-d. ssh-agent ). Dans ce cas, ma réponse serait une alternative à l'authentification par clé publique sans phrase d'authentification dans le fichier de la clé privée.

1voto

styrofoam fly Points 1816

Utiliser un gestionnaire de mots de passe.

Certains gestionnaires de mots de passe (par exemple KeePassXC) disposent d'une fonction de "saisie automatique". Vous stockez le mot de passe dans le gestionnaire de mots de passe, déverrouillez la base de données lorsque vous lancez le gestionnaire et à chaque fois que vous utilisez le gestionnaire de mots de passe. ssh vous demande votre mot de passe vous appuyez sur une combinaison de touches qui permet au gestionnaire de mots de passe d'écrire votre mot de passe long sur la console.

Il n'est pas nécessaire de copier ou de se souvenir de quoi que ce soit (à l'exception du mot de passe pour déverrouiller la base de données) et vous pouvez avoir un mot de passe fort sans avoir à taper 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

0voto

slebetman Points 622

Une autre solution 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, qui incluent normalement PuTTY dans leur répertoire.

Un autre très bon client est Termius . Il prend en charge non seulement Windows et Linux, mais aussi OSX, iOS et Android. Bien qu'il ait été principalement conçu 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 sous Windows dispose également d'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 GUI ont la possibilité d'enregistrer les paramètres de connexion, y compris le nom d'utilisateur et le mot de passe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X