windows - Hvordan kan man automatisere sftp fra maskine B til maskine C med maskine A?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle filer, der skal være sftp fra maskine B (linux) til maskine C. Vi skal starte opgaven i maskine A (windows server 2003) og planlægge dette i Windows Scheduler. Hvordan kan jeg gøre det?


Jeg ville gøre det interaktivt som dette:



  1. ftp filerne fra maskine A til maskine B.

  2. telnet til maskine B.

  3. med telnet, sftp fra maskine B til maskine C, sæt filerne fra maskine B til maskine C.



Hvordan kan jeg gøre dette med et script i maskine A, som er et vindue? Jeg kan ikke installere andre software til at hjælpe.

Bedste reference


Du nævnte ftp, telnet og sftp. De kunne scriptes via noget som forventet eller via et eventuelt komplekst script på A. Men du kan muligvis bruge dette unix-trick til at gøre alt fra A. Du skal kunne ssh fra A til B, og fra B til C. Du skal bruge identitetsautentificeringsopsætning, så det er ikke nødvendigt med en adgangskode til disse forbindelser. (Du kan bruge agent videresendelse af identiteten på A for begge forbindelser.) Kør så noget som dette på A:


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


Det vil flytte filen fra A til C, via B, uden at gemme filen på B.


Jeg har gjort denne slags ting på windows, før du bruger ssh og kat, der er en del af Cygwin. Jeg ved ikke hvor godt det ville fungere med andre Windows-værktøjer ...


EDIT: Jeg skulle have sagt et ord til to om, hvordan den kommando fungerer. Ssh-programmet giver et rør slags for at flytte data frem og tilbage mellem den lokale og eksterne maskine. Normalt er dette rør forbundet til en skal på den fjerne ende, og den tjener samme formål som telnet, undtagen med bedre sikkerhed. Men dette rør kan bruges til noget. SFTP-værktøjet bruger det rør til at flytte filer rundt. Ssh-kommandoen kan tage en kommando til at udføre på fjernsystemet. For eksempel ville ssh B ls forbinde til B, køre ls og sende resultaterne tilbage til dig. Hvad kommandoen ovenfor gør, er ssh til B, og spørg B om at køre en ssh-forbindelse til C. Det giver os et rør fra A til B til C. Nu skal du gøre i begge ender ? Programmet cat læser filer og skriver dem til standard ud. Hvis der ikke gives filnavne, læses det standard i. cat file-on-a læser filen på A maskine og skriver den til kommandoen ssh. cat > file-on-c læser de data, der er sendt til den og > file-on-c delen (takket være skallen), skriver den til filen file-on-c.


Igen, ikke sikker på om dette er en mulighed i dit miljø. Håber det hjælper.

Andre referencer 1


Den rigtige måde at gøre dette på er med 'scp', som typisk kommer i samme pakke som ssh og sftp, og som fungerer ligesom 'cp' bortset fra at en eller begge stier kan være fjernt:


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


Du har brug for en ssh-klient, der indeholder scp på initieringsmaskinen, men det har du sikkert allerede.

Andre referencer 2


Du kan måske se på noget som RabbitMQ, før det bliver for sent. Brug af meddelelseskøer og fjernskripter hjælper med at sikre, at opgaver som disse udføres korrekt. [12]


Jeg ved, at dette ikke er svaret, du ledte efter, da det kræver meget mere end et simpelt script, men ved hjælp af messaging kan det drastisk reducere administrationen på tværs af platforme over tid.


Hvis du virkelig har brug for at udføre en handling som beskrevet, kan du bruge Robs svar, men brug af tomme nøgler er imod den bedste sikkerhedspraksis. Et alternativ ville være et simpelt drop directory på B, som et script på B skærme, der er synkroniseret til C (enten via ftp/sftp/rsync eller endda en fjernbetjening) - igen kræver et script på B.

Andre referencer 3


Da du ser ud til at bruge en Windows mellemled mellem to Linux-maskiner, er den mest idiomatiske anbefaling, at du kan udforske SSHFS til Windows-systemer. [14] [15]


Din ideelle situation er, at hvis du opretholder en rørledning mellem maskinerne A og C, er det ønskeligt i et Windows-miljø, at være i stand til at oprette forbindelse til både afhentningspunktet (på A) og drop point (på C) og bare skrive nogle Batch automation for at sende filer automatisk. Dette er ikke modstandsdygtigt over for fejl, skal du være opmærksom på (du skal etablere en form for rekonverteringsprotokol), men det har den ekstra fordel at kunne gøre det i din GUI, når tingene går galt, eller når du overfører dette system til til en anden. [16]


Ellers, hvis dette er et hurtigt job, der tolerabelt kan køres fra shell, er Rob korrekt. Det kan gøres tersely og korrekt, med simpel rørhæftning.

Andre referencer 4


Hvis du siger, at kun B kan forbinde til C, og du vil have filer fra A til C, vil jeg foreslå at bruge SSH-tunnel fra B til C.
På denne måde kan du få adgang fra A til C til B.


Fra boks B gør ssh tunnel til boks C:


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


Derefter forbindes fra boks A til boks C sftp ved at forbinde til:


box-b.com:3025


For at automatisere tunnelen og holde den i live uanset hvad der sker, foreslår jeg at bruge autossh - http://www.harding.motd.ca/autossh/(leveres med de fleste Linux-distributioner). [18]


Hvis du vil blokere andre fra at få adgang til box-b.com:3025, skal du bruge boks B-firewall til kun at tillade forbindelser til den pågældende port fra boks A.


Jeg kommer nogle gange i en lignende situation, og det er den nemmeste løsning, jeg har fundet.