2010-01-15 6 views
1

Je me suis efforcé d'envoyer automatiquement un message SSH à un serveur Linux. Ce qui est fou, c'est que je peux créer un script .bat, ça va le faire, mais je dois être là physiquement, pour taper le mot de passe.CMD.exe C# Emulator?

J'ai essayé d'automatiser cela en utilisant l'objet System.Diagnostics.Process dans C# sans fin. Je n'ai trouvé aucun moyen de faire en sorte que cet objet vous permette de voir l'invite de mot de passe. Il place chaque ligne jusqu'à ce point, et ne produit plus de lignes. Cmd.exe, fait vraiment bien de vous permettre de passer d'un processus à l'autre dans un script; Il consolide tout en un seul écran, et juste vous invite à des choses telles que les mots de passe, puis vous les taper.

Y at-il moyen simple, en C#, pour faire cmd.exe pense que vous êtes un être humain taper dedans, donc je peux simuler cela par programme? Sinon, System.Diagnostics.Process ne semble pas offrir un moyen d'interagir avec un processus qui génère une invite de mot de passe. On n'a jamais de voir l'invite qui se passe clairement lorsque vous exécutez la même chose dans cmd.exe

+3

Avez-vous envisagé la mise en place des clés ssh pour éviter le mot de passe problème? http://oreilly.com/pub/h/66 – dsolimano

+0

Oui, j'ai fait cela. Lorsqu'il est implémenté, le fichier de commandes se passe sans invite. Toutefois, via System.Diagnostics.Process, le processus arrête la sortie des lignes au point où la clé d'authentification ssh est transmise. –

+0

L'authentification est peut-être effectuée dans un autre processus, autre que celui spécifié dans l'objet de processus. Contrairement à cmd.exe, l'objet de processus perd la possibilité d'être surveillé une fois que ce processus en appelle un autre. –

Répondre

1

Vous pouvez utiliser

Windows.Forms.SendKeys() pour envoyer le mot de passe comme frappes

Reference Material

Cmd.exe
+0

Le problème est, je ne peux pas obtenir C# même rendre l'invite de mot de passe disponible. L'objet System.Diagnostics.Process, sort la ligne du processus de ligne de commande jusqu'à ce que l'invite soit sortie, puis arrête la sortie des lignes. –

+0

Le processus met en attente d'un mot de passe à entrer, et je n'ai aucun moyen via System.Diagnostics.Process pour accéder à l'invite. –

2

n'est pas le client SSH; c'est juste une coquille pour un. Explorez les capacités du client réel. En PuTTY (très populaire!), Il y a une fonction d'autologon, si vous avez une clé SSH.

+0

D'accord.Vous avez vraiment besoin de regarder dans les clés ssh. Ils fournissent un moyen sécurisé de se connecter via SSH sans avoir à taper votre mot de passe de chaque façon. – GnomeCubed

+0

J'ai déjà implémenté des clés. Ils fonctionnent dans cmd.exe, mais dans l'objet System.Diagnostics.Process de C#, toute sortie (accessible via cet objet de processus) cesse juste avant (ou pendant) l'authentification ssh-key. Dans quand je double-clique sur un fichier .bat, cependant, la sortie passe après l'authentification. –

+0

Si j'utilise le même fichier .bat (qui ne se bloque pas), comme mon System.Diagnostics.Process.Filename, l'objet de processus est incapable de sortir les lignes après l'authentification. –

1

Sans savoir quel outil de ligne de commande vous utilisez pour ssh vers le serveur, il n'existe pas de paramètre de ligne de commande pour fournir un mot de passe.

C:\> ssh [email protected] -p password 

Ou avez-vous essayé la redirection d'entrée:

ssh [email protected] < 
Yourpassword 
EOF 

En regardant dans votre earlier question, quel est le problème que vous avez à utiliser l'interface de programmation?

Etes-vous sûr que vous avez besoin d'un client ssh complet, ou voulez-vous simplement exécuter une commande à distance? Si c'est ce dernier, vous voudrez peut-être vérifier plink.

+0

Non, ssh ne permet pas d'entrer le mot de passe en tant que paramètre. Oui, j'ai essayé la redirection d'entrée. Peut-être que l'essence du problème est que je ne peux pas continuer à interagir après m'être authentifié. –

+0

Vous voyez, même lorsque j'ai évité d'avoir à taper le mot de passe (via ssh-key-authentication), dès que l'authentification se produit, je ne peux plus surveiller la sortie de ligne de l'objet System.Diagnostics.Process. –

+0

C'est comme s'il y avait une sorte de sécurité délicate à ce moment-là. Je suis programmeur, pas un hacker. Peut-être que je vais devoir devenir hacker pour écrire ce programme! –