Je crée un fichier de script par programme et appelle psftp.exe
comme suit:
psftp [email protected] -pw password -b psftpscript.txt
mais il invite l'utilisateur à entrer
La clé hôte du serveur n'est pas mise en cache dans le registre. Vous n'avez aucune Garantie que le serveur est l'ordinateur que vous pensez être. L'empreinte digitale de la clé rsa2 du serveur Est: [ssh-rsa 1024 une clé] Si vous faites confiance à cet hôte , Entrez "y" pour ajouter la clé au cache de PuTTY et continuer connexion. Si vous souhaitez continuer à vous connecter une seule fois, sans que Ajoute la clé au cache, entrez "n". Si vous ne faites pas confiance à cet hôte, appuyez sur la touche Retour pour abandonner la connexion. Stocker la clé dans le cache? (y/n)
J'ai besoin que ce soit complètement libre, automatique. J'ai essayé le paramètre -batch mais il abandonne simplement la connexion
J'ai eu le même problème avec l'exécution d'un script sans assistance dans l'environnement de type "bac à sable" de Windows Server 2008. J'ai fini par exécuter le texte suivant qui entre la y
à l'invite:
echo y | psftp [email protected] -l username -pw password -b psftpscript.txt
J'espère que cela t'aides!
Remarque: Je n'ai eu à exécuter l'écho qu'une seule fois et le supprimer pour la 2e manche ne demandait plus la mise en cache de la clé.
lorsque vous l'exécutez pour la première fois, il vous montrera votre clé pour le serveur. Copiez la clé puis, sur votre ligne de commande, spécifiez votre clé d'hôte de la manière suivante:
psftp yourhostAddress -hostkey 06:15:d4:3b:e4:e8:23:c0:d6:6d:45:47:7e:bd:8d:74 -l yourusername -pw yourpassword -batch
Vous pouvez créer un fichier en entrée contenant uniquement un y et un retour chariot, puis exécuter
psftp [email protected] -pw password -b psftpscript.txt < filename.txt
Merci à James de http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspx pour cette solution simple
En .Net, j’ai constaté que la méthode ci-dessus ne fonctionnait pas comme prévu. L'astuce consistait à utiliser la redirection d'entrée .Net intégrée, et non l'opérateur <
. Voici à quoi ressemble le code maintenant:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "c:\\psftp.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.Arguments = strIP + " -v -l " + strUsername + " -pw " + strPassword + " -b " + strBatchFilename;
proc.Start();
StreamWriter myStreamWriter = proc.StandardInput;
myStreamWriter.WriteLine("Y\n"); //override the public key question <---
myStreamWriter.Close();
proc.WaitForExit();
proc.Close();
J'ai eu le problème où je n'avais pas la permission de supprimer/renommer le fichier sur le serveur distant et que les fichiers contenaient un horodatage. J'avais donc besoin de télécharger les fichiers par nom. Le psftp peut n'accepte pas les paramètres (ou de quelque manière que je sache) et je ne pouvais pas modifier dynamiquement les noms de fichiers en fonction de la date du jour.
Donc, à partir du fichier batch que j'appelle les commandes psftp, j'ai créé les commandes de manière dynamique et avec le fichier avec l'horodatage approprié. Je ne pouvais copier que les fichiers d'aujourd'hui, ce qui est préférable puis tout copier à chaque fois. .
cd "C:\CX\FTP\IG\Files"
echo cd outbound > C:\SFTP\temp.txt
echo mget file_%date:~10,4%%date:~4,2%%date:~7,2%*.csv >> C:\SFTP\temp.txt
echo quit >> C:\SFTP\temp.txt
echo close >> C:\SFTP\temp.txt
C:\SFTP\psftp [email protected] -b C:\SFTP\temp.txt
close
exit
Le fichier "echo cd sortant> C:\SFTP\temp.txt" a nettoyé l'ancien fichier et commence à écrire le contenu du nouveau fichier. Le "echo mget file_% date: ~ 10,4 %% date: ~ 4,2 %% date: ~ 7,2% .csv >> C:\SFTP\temp.txt "a abouti à la création de la commande:" mget file_20151008 . Csv "qui télécharge tous les fichiers qui commencent par "fichier_20151008 ...", les 2 lignes suivantes viennent de terminer l'action et la ligne "C:\SFTP\psftp [email protected] -b C:\SFTP\temp.txt" l'exécute.
comme résultats temp.txt ressemble à ceci:
cd outbound
mget file_20151008*.csv
quit
close
Je pense qu'il y a un problème avec votre ligne de commande.
Usage: psftp [options] [user@]Host
Essayer:
psftp -pw password -b psftpscript.txt [email protected]
Cela ne répond pas directement à votre question, mais offre une solution de contournement possible:
Lancez une invite de commande en tant qu'utilisateur qui exécutera votre script et acceptez manuellement le certificat. Ensuite, lors de futures connexions, vous n’aurez plus le problème.
Compte tenu de vos besoins, au-delà de ce qui a été énoncé, cela peut ne pas fonctionner. Je suis arrivé à cette question avec le même problème et j'ai fini par la résoudre en utilisant l'approche que je viens de décrire.