109 votes

Pouvez-vous définir des mots de passe dans .ssh/config pour permettre la connexion automatique ?

J'utilise Ubuntu 11.10 et ssh pour se connecter à de nombreux serveurs par jour, j'ai donc mis leurs paramètres dans le fichier .ssh/config comme ceci :

Host Home
User netmoon
Port 22
HostName test.com

Existe-t-il un moyen de mettre les mots de passe de chaque connexion dans ce fichier, de sorte que, lorsque le serveur demande le mot de passe, le terminal entre son mot de passe et l'envoie au serveur ?

J'en ai besoin car il m'arrive de m'absenter du PC et, lorsque je reviens, je tape un mot de passe et j'appuie sur la touche Enter le terminal dit CONNECTION CLOSED .

P.S. Je ne veux pas utiliser une paire de clés publique/privée.

58voto

waltinator Points 32821

Troquer la sécurité pour la commodité ne se termine jamais bien...

Pourriez-vous utiliser ssh-copy-id de la openssh-client paquet ?

De man ssh-copy-id :

ssh-copy-id est un script qui utilise ssh pour se connecter à un serveur distant. distante et ajouter le fichier d'identité indiqué au fichier fichier ~/.ssh/authorized_keys de cette machine.

27voto

colinfang Points 1297

Si vous ne souhaitez pas vraiment utiliser une paire de clés publiques/privées, vous pouvez écrire une clé de type expect script pour saisir automatiquement le mot de passe à votre place en fonction de l'adresse de destination.

Edit : Ce que je veux dire, c'est que vous pouvez avoir un script qui, d'une part, utilise expect pour saisir le mot de passe à votre place et, d'autre part, lit le mot de passe pour un utilisateur et un hôte donnés à partir d'un fichier de configuration. Par exemple, le script Python suivant fonctionnera pour le scénario de la journée ensoleillée :

#!/usr/bin/python                                                                                                                        
import argparse
from ConfigParser import ConfigParser
import pexpect

def main(args):
    url = args.url
    user, host = url.split('@', 1)

    cfg_file = 'ssh.cfg'
    cfg = ConfigParser()
    cfg.read(cfg_file)
    passwd = cfg.get(user, host)

    child = pexpect.spawn('ssh {0}'.format(url))
    child.expect('password:')
    child.sendline(passwd)
    child.interact()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run ssh through pexpect')
    parser.add_argument('url')
    args = parser.parse_args()
    main(args)

et le format du fichier de configuration serait le suivant :

[user_1]
host1 = passwd_1
host2 = passwd_2

[user_2]
host1 = passwd_1
host2 = passwd_2

Note : Comme expliqué, le script Python devrait être beaucoup plus complexe pour gérer toutes les erreurs possibles et les messages d'interrogation de ssh et toutes les URL possibles (dans l'exemple, il est supposé que ce sera quelque chose comme user@host mais la partie utilisateur n'est pas utilisée la plupart du temps), mais l'idée de base reste la même. En ce qui concerne le fichier de configuration, vous pouvez utiliser un fichier de configuration différent ou utiliser .ssh/config et écrire votre propre code pour analyser ce fichier et obtenir le mot de passe pour un utilisateur et un hôte donnés.

24voto

Trever Shick Points 915

Et pourquoi pas ProxyCommand :

Host Home-raw
    HostName test.com
Host Home
   User netmoon
   Port 22
   ProxyCommand sshpass -pmypass ssh netmoon@%h-raw nc localhost %p

Vous pouvez utiliser ssh -W au lieu de nc également :

ProxyCommand sshpass -pmypass ssh netmoon@%h-raw -W localhost:%p

21voto

Andy Points 183

Il y a aussi sshpass programme pour cela. Comment l'utiliser : sshpass -p MyPa55word ssh me@myservor.com

16voto

pele Points 9

Non. Ce n'est pas possible, j'en ai peur.

La seule véritable alternative est d'utiliser des clés privées, mais vous avez dit que vous ne vouliez pas le faire (pourquoi pas ?).

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