Comment peut automatiser sftp de la machine B à la machine C avec la machine A?

J’ai quelques fichiers qui doivent être sftp de la machine B (Linux) à la machine C. Nous devons démarrer la tâche dans la machine A (Windows Server 2003) et planifier cela dans le planificateur Windows. Comment puis-je le faire?

Je le ferais interactivement comme ceci:

  1. ftp les fichiers de la machine A à la machine B.
  2. telnet à la machine B.
  3. avec le telnet, sftp de la machine B vers la machine C, placez les fichiers de la machine B sur la machine C.

Comment puis-je faire cela avec un script dans la machine A qui est une fenêtre? Je ne peux pas installer d’autres logiciels pour vous aider.

Vous avez mentionné ftp, telnet et sftp. Celles-ci pourraient être écrites via expect, ou via un script éventuellement complexe sur A. Cependant, vous pourriez peut-être utiliser cette astuce unix pour tout faire à partir de A. Vous devrez être capable de ssh de A à B, et de B à C. Vous aurez besoin de la configuration de l’authentification d’identité, de sorte qu’un mot de passe n’est pas requirejs pour ces connexions. (Vous pouvez utiliser le transfert d’agent de l’identité sur A pour les deux connexions.) Ensuite, exécutez quelque chose comme ceci sur A:

cat file-on-a | ssh B "ssh C 'cat > file-on-c'" 

Cela va déplacer le fichier de A à C, via B, sans stocker le fichier sur B.

J’ai fait ce genre de chose sur Windows avant d’utiliser le ssh et le chat qui font partie de Cygwin. Je ne sais pas dans quelle mesure cela fonctionnerait avec d’autres outils Windows …

EDIT: J’aurais dû dire un mot à deux sur le fonctionnement de cette commande. Le programme ssh fournit un canal de transfert des données entre la machine locale et la machine distante. Normalement, ce canal est connecté à un shell à l’extrémité distante et il a le même objective que telnet, sauf avec une meilleure sécurité. Cependant, ce tuyau peut être utilisé pour n’importe quoi. L’utilitaire sftp utilise ce canal pour déplacer les fichiers. La commande ssh peut exécuter une commande à exécuter sur le système distant. Par exemple, ssh B ls se connecte à B, exécute ls et vous renvoie les résultats. Ce que la commande ci-dessus fait est ssh à B, et demande à B d’exécuter une connexion ssh à C. Cela nous donne un tuyau de A, à B, à C. Maintenant, que faire aux deux extrémités? Le programme cat lit les fichiers et les écrit en sortie standard. Si aucun nom de fichier n’est donné, il lit standard in. Le cat file-on-a lit le fichier sur la machine A et l’écrit dans la commande ssh . cat > file-on-c lit les données qui lui sont envoyées et la partie > file-on-c (grâce au shell) écrit cela dans le file-on-c .

Encore une fois, vous ne savez pas si c’est une option dans votre environnement. J’espère que cela aide.

La bonne façon de faire est d’utiliser ‘scp’, qui vient généralement dans le même paquet que ssh et sftp, et qui fonctionne comme ‘cp’, sauf que l’un ou l’autre ou les deux chemins peuvent être distants:

 scp user@machineA:/path/to/file user@machineB:/path/to/file 

Vous avez besoin d’un client ssh qui inclut scp sur la machine initiasortingce, mais vous l’avez probablement déjà.

Vous voudrez peut-être examiner quelque chose comme RabbitMQ avant qu’il ne soit trop tard. L’utilisation de la queue de messages et de scripts distants vous aidera à vous assurer que ces tâches sont correctement exécutées.

Je sais que ce n’est pas la réponse que vous recherchiez, car elle nécessitera beaucoup plus qu’un simple script, mais l’utilisation de la messagerie peut réduire considérablement l’administration multi-plateforme au fil du temps.

Si vous devez vraiment effectuer une action comme décrit, vous pouvez utiliser la réponse de Rob , mais l’utilisation de clés vierges va à l’encontre des meilleures pratiques de sécurité. Une alternative serait un simple répertoire de repository sur B, qu’un script sur B surveille, qui est synchronisé sur C (via ftp / sftp / rsync ou même un assembly distant) – nécessitant à nouveau un script sur B.

Étant donné que vous semblez utiliser un intermédiaire Windows entre deux machines Linux, la recommandation la plus idiomatique est d’explorer SSHFS pour les systèmes Windows .

Si vous souhaitez conserver un pipeline entre les machines A et C dans un environnement Windows, votre cas idéal est de pouvoir vous connecter au sharepoint collecte (sur A) et au sharepoint repository (sur C) et simplement écrire une automatisation par lot pour envoyer fichiers automatiquement. Cela ne résiste pas aux pannes, vous devez établir un protocole de reconnexion, mais il a l’avantage de pouvoir le faire dans votre interface graphique lorsque les choses tournent mal ou lorsque vous transmettez ce système. à quelqu’un d’autre.

Sinon, si cela peut être exécuté rapidement à partir du shell, Rob est correct . Cela peut être fait, de manière simple et correcte, avec un agrafage simple.

Si vous dites que seul B peut se connecter à C et que vous voulez obtenir des fichiers de A à C, je vous suggère d’utiliser le tunnel SSH de B à C. De cette façon, vous pouvez accéder de A à C par B.

A partir de la case B, faites ssh tunnel à la case C:

 ssh box-c.com -gL 3025:localhost:22 

Ensuite, à partir de la boîte A, connectez-vous à la boîte C sftp en vous connectant à:

box-b.com:3025

Pour automatiser la fabrication du tunnel et le maintenir en vie, peu importe ce qui se passe, je vous suggère d’utiliser autossh – http://www.harding.motd.ca/autossh/ (fourni avec la plupart des dissortingbutions Linux).

Si vous souhaitez empêcher les autres utilisateurs d’accéder à box-b.com:3025, utilisez la case B du pare-feu pour autoriser les connexions à ce port uniquement à partir de la case A.

Je suis parfois dans une situation similaire et c’est la solution la plus simple que j’ai trouvée.