2011-08-19 4 views
1

Sous Unix, vous disposez d'outils tels que Expect et Empty pour interagir avec des applications de terminal telles que sftp, en utilisant des pseudo-terminaux. J'ai une machine Windows avec cygwin installé dessus et mon application C# doit démarrer une session sftp pour transférer certains fichiers vers une machine distante.Interagir avec sftp (cygwin) à partir de l'application sur Windows

J'ai commencé avec un code comme celui-ci

var p = new Process(); 

p.StartInfo = new ProcessStartInfo 
{ 
    FileName = "sftp", 
    UseShellExecute = false, 
    CreateNoWindow = false, 
    RedirectStandardInput = true, 
    Arguments = username + "@" + server 
}; 

p.Start(); 
p.StandardInput.WriteLine(password); 

Le problème est que sftp ne lirai pas un mot de passe stdin, uniquement à partir du terminal. C'est là qu'intervient Expect. En dehors de l'installation de Expect dans cygwin, est-il possible d'envoyer de manière interactive un mot de passe à sftp à partir d'un programme C#?

+0

Avez-vous absolument besoin de vous authentifier avec un mot de passe? L'utilisation de l'authentification par clé publique pourrait être moins problématique –

+0

Je suis d'accord que ce serait moins problématique et que nous pourrions mettre en place des sessions sans mot de passe mais c'est comme ça - avoir à supporter l'interaction usrname/pwd par le code. –

+1

raison pour laquelle vous n'utilisez pas un client .NET sftp pur (avec toutes les options pour l'authentification, etc.)? – Yahia

Répondre

0

Cygwin a packages for tons of common UNIX utilities, incluant expect et (probablement) vide. En théorie, vous pouvez toujours utiliser ces ... (pas que ce soit l'option la plus sécurisée, compacte ou idéale ... mais c'est une option!)

+0

A bientôt, j'ai dit "en dehors de l'installation d'Expect in Cygwin" mais c'est peut-être la façon dont nous finissons par aller s'il n'y a pas d'alternative. –

+0

Bon ... j'ai besoin de lire plus attentivement! :RÉ – ewall

Questions connexes