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#
?
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 –
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. –
raison pour laquelle vous n'utilisez pas un client .NET sftp pur (avec toutes les options pour l'authentification, etc.)? – Yahia