Comment lire fichier via ssh/scp directement
J'ai un programme écrit en C/C++ qui lit les deux fichiers, puis générer des rapports. Le flux de travail typique est comme suit:
1> scp user@server01:/temp/file1.txt ~/then input my password for the prompty
2> my_program file1.txt localfile.txt
Est-il un moyen que je peux laisser mon programme gérer directement les fichiers à distance, sans explicitement la copie d'un fichier local en premier? J'ai essayé la commande suivante, mais il ne fonctionne pas pour moi.
> my_program <(ssh user@server01:/temp/file1.txt) localfile.txt
OriginalL'auteur q0987 | 2014-12-15
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
ssh user@host "cat /temp/file.txt"
.Vous pouvez l'utiliser pour rediriger vers stdin de votre programme:
ssh user@host "cat /temp/file.txt" | my_program
ou vous pouvez réellement appeler cela dans votre programme avec un fork/exec. Ou comme vous l'avez décrit pour générer un fichier temporaire:my_program <(ssh user@host "cat /temp/file.txt")
Autres options serait d'utiliser sshfs avec fusible ou à l'aide d'un ssh (ou VFS) bibliothèque dans votre programme.
Votre programme doit lire depuis l'entrée standard stdin pour mon exemple. Certains le font automatiquement si vous ne spécifiez aucun fichier d'entrée, certains le font si vous spécifiez " - " comme nom de fichier.Si votre programme ne le fait pas, alors vous devez utiliser le fichier temp fonction que vous suggérez dans votre question, j'ajuste la réponse. Le principal de la peinture de ma réponse est à l'aide de "chat".
aussi, vous aurez probablement besoin de configuration ssh sans mot de passe à l'aide de clés autorisées d'autre, vous allez devoir vous programme envoyer votre pssword
OriginalL'auteur eckes
Si vous êtes vraiment sur de Red Hat Linux, cela devrait fonctionner:
À l'aide d'un seul
-
au lieu de/dev/stdin
peuvent fonctionner aussi bien, mais il faudrait savoir simy_program
a été écrit pour interpréter un argument de-
"a lire ce fichier à partir de stdin".Aussi, cela pourrait ne pas fonctionner si
my_program
s'attend à être en mesure d'obtenir autour dans le premier fichier (flux e/S sont généralement non-adressable), mais si il n'est de lire à partir du premier octet pour le dernier octet, il devrait être OK.OriginalL'auteur twalberg