passer des mots de passe à un script

3

Je souhaite créer scpun fichier sur un hôte distant, puis exécuter une commande sur le fichier et quitter la session distante. Si j'écris un script habituel, appelez scppuis ssh, je suis invité à entrer deux mots de passe. Existe-t-il un moyen de copier, sshet d’exécuter une commande sur un ordinateur distant avec un seul mot de passe?

Aussi, comment écrire des scripts qui doivent interagir avec l'utilisateur pour entrer des mots de passe?

Je ne veux pas utiliser "read" car ce n'est pas sûr. Je ne veux pas utiliser sans mot de passe sshcar mon fichier de clé privée peut être compromis, ce qui est encore pire. J'ai lu quelque chose à propos de "s'attendre" mais je ne suis pas sûr que ce soit le bon outil.

Eli
la source
exceptstocke également votre mot de passe en mémoire dans la mémoire, il est donc aussi mauvais que read. Oh, pas si mal. Comme il reads'agit d'un shell intégré, la variable peut être conservée plus longtemps dans la mémoire si vous ne la désactivez pas.
Arthur2e5

Réponses:

4

Je ne veux pas utiliser ssh sans mot de passe, car mon fichier de clé privée peut être compromis, ce qui est encore pire.

Non, c'est faux. Un fichier de clé privée offre plus de sécurité qu'un mot de passe. Utilisez un fichier de clé privée. Le fichier de clé privée est crypté avec un mot de passe; si quelqu'un récupère le fichier de clé, il a toujours besoin de votre mot de passe. Si vous utilisiez l'authentification par mot de passe, toute personne cherchant le mot de passe serait libre de chez elle.

Courez ssh-agentpendant la durée de votre session. Avant d'utiliser une clé particulière, entrez le mot de passe avec ssh-add(ou via une invite de l'interface graphique). Ensuite, il n'y aura pas d'invite lorsque vous vous connecterez à l'aide de cette clé.

Gilles
la source
Sûr. Mais si quelqu'un récupère votre fichier de clé privée, il peut prendre son temps pour exécuter divers logiciels sur celui-ci pour le casser. Mais obtenir votre mot de passe n'est pas comme ça et est généralement plus difficile à pirater. Donc, je ne suis pas sûr de la sécurité de ssh-agent. Si quelqu'un casse votre clé, doit-il également utiliser votre propre ordinateur pour se connecter à l'hôte distant, ou peut-il se connecter depuis n'importe quel poste?
Eli
1
@eli Cracker un fichier de clé protégé par mot de passe ne devrait pas être plus facile que de déchiffrer un mot de passe de compte de force équivalente. Une bonne clé aléatoire est beaucoup plus difficile à deviner qu'un mot de passe typique. La seule raison que j’ai vue pour l’application du mot de passe uniquement est qu’il est plus simple, du point de vue logistique, pour les administrateurs de site d’appliquer des stratégies de renforcement du mot de passe à l’échelle du site que d’appliquer des stratégies de mot de passe composé de clé privée.
Jw013
2

Existe-t-il un moyen de copier, ssh et d’exécuter une commande sur une machine distante avec un seul mot de passe?

Il y a deux façons de varier, en termes de commodité et de compromis.

L'une consiste à transférer le fichier en ligne. Avez-vous besoin d'une entrée autre que le contenu du fichier? Si non, ssh example.com 'cat > the_file ; process the_file' < the_filefera ce que vous voulez.

L'autre consiste à faire quelque chose qui réutilise la connexion SSH. ControlMasteret friends for ssh peuvent aider - voir ssh_config(1)pour plus de détails, ou il existe différents wrappers, ou implémentations de SSH pour différents langages de programmation utiles.

Aussi, comment écrire des scripts qui doivent interagir avec l'utilisateur pour entrer des mots de passe?

Lisez-le à partir de l'ATS. Généralement, la meilleure stratégie consiste à permettre à ssh d’interagir directement avec l’utilisateur sans se gêner, car il dispose d’une implémentation beaucoup mieux testée et validée de cette manière.

Je ne veux pas utiliser read car ce n'est pas sûr.

Pour interagir avec l'utilisateur, je présume. En fait, il n’est pas très différent de laisser SSH poser la question de la sécurité, mais c’est l’idéal pour rester à l’écart.

Je ne veux pas utiliser ssh sans mot de passe, car mon fichier de clé privée peut être compromis, ce qui est encore pire.

... et je présume que l'agent SSH n'est pas acceptable non plus pour la même raison.

Daniel Pittman
la source
Les solutions de chat fonctionnent bien; J'ai imprimé un fichier de cette façon hier. Apparemment, cela fonctionne aussi pour beaucoup de types de fichiers. Je ne connaissais pas MasterControl, je dois le vérifier. Merci beaucoup de l'avoir signalé.
Eli
2

Utiliser 's'attendre' pour ce que vous demandez est possible et certaines personnes l'utilisent encore. Un script d'attente peut "intercepter" la sortie des commandes et vous pouvez "répondre" en fonction de leur sortie. Votre script ressemblera à:

spawn scp some_file user@host:/destination
expect "*?assword:*"
send -- "Your Super Secret Password Here\r"
send -- "\r"

Bien sûr, cela fonctionnerait, mais cela poserait un autre problème. Votre mot de passe sera enregistré sous forme de texte brut et toute personne lisant ce fichier pourra voir votre mot de passe.

Mon opinion personnelle est que le moyen non interactif le plus sûr est l'authentification par clé privée.

Patkos Csaba
la source
0

Vous pouvez utiliser des sshclés, mais les attribuer à un utilisateur personnalisé du système distant dont le shell est défini non pas à un shell réel, mais à une commande à exécuter. Lors de la connexion, la commande est exécutée et le terminal se ferme. Ainsi, si le mot de passe est compromis, ils ne peuvent pas entrer de commande de manière interactive, mais uniquement exécuter le jeu de commandes défini en tant que shell.

LawrenceC
la source