Viele Menschen haben automatisierte Prozesse für die Übertragung von Dateien mit FTP entwickelt. Es gibt verschiedene Möglichkeiten, dies zu tun, einige besser als andere. In diesem Blog werden die verschiedenen Ansätze erörtert und die Vor- und Nachteile der einzelnen Verfahren aufgezeigt. Außerdem wird auf ein Problem eingegangen, das zu einer unvollständigen Übertragung von Dateien führen kann.
Am einfachsten ist es, wenn Sie Ihre Benutzer-ID, Ihr Kennwort und alle Ihre FTP-Anfragen in ein Befehlsmakro (Abbildung 1) eingeben und es einfach ausführen (Abbildung 2).
&attach_input |
Abbildung 1 - ftp1.cm - einfaches Befehlsmakro
ftp1 |
Abbildung 2 - ftp1.cm - Ausführung eines einfachen Befehlsmakros
Der Nachteil dieses Ansatzes ist, dass Ihre Benutzer-ID und vor allem Ihr Kennwort als Teil des Makros im Klartext vorliegen. Jeder, der Zugriff auf das Makro hat, kann sie sehen. Der zweite Ansatz besteht darin, die .netrc-Datei zu verwenden, um Ihre Benutzer-ID und Ihr Kennwort zu speichern. (Abbildung 3). Das Befehlsmakro (Abbildung 4) enthält dann nur die auszuführenden FTP-Anfragen (Abbildung 5).
machine 172.16.1.116 |
Abbildung 3 - .netrc-Datei
&attach_input |
Abbildung 4 - ftp2.cm - Befehlsmakro ohne Benutzer-ID und Passwort
ftp2 Connected to 172.16.1.116. |
Abbildung 5 - ftp2.cm - Ausführen des Befehlsmakros ohne Benutzer-ID und Passwort
Die .netrc-Datei funktioniert nur, wenn der Eigentümer der einzige ist, der Zugriff auf die Datei hat (Abbildung 6). Wenn jemand anderes Lesezugriff hat (Abbildung 7), funktioniert sie nicht und es wird eine Kennwortabfrage angezeigt (Abbildung 8).
display_access .netrc -all %phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
Abbildung 6 - korrekte ACLs in der .netrc-Datei
display_access .netrc -all %phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
Abbildung 7 - falsche ACLs in der .netrc-Datei
ftp2 |
Abbildung 8 - Kennworteingabe, wenn .netrc die falschen ACLs enthält
Sie können alle Befehle in der .netrc-Datei unterbringen, indem Sie ein FTP-Makro erstellen. Wenn das Makro den Namen "init" (Abbildung 9) trägt, wird es automatisch nach der Anmeldung ausgeführt. Dadurch ist das VOS-Befehlsmakro nur eine Zeile lang (Abbildung 10), nämlich der FTP-Befehl. Das Hauptproblem bei diesem Ansatz ist, dass es keine Fehlerbehebung gibt; Sie können den Status der FTP-Anfragen nicht mit der Funktion (command_status) überprüfen (Abbildung 11).
machine 172.16.1.116 |
Abbildung 9 - .netrc-Datei mit init-Makro
ftp 172.16.1.116 |
Abbildung 10 - ftp3.cm - Makro bei Verwendung mit der .netrc-Datei, die das FTP-Makro init enthält
ftp3 |
Abbildung 11 - ftp3.cm - Ausgabe bei Verwendung des init-Makros - keine Fehlerbehebung
Viele Makros, die ich gesehen habe, warten in einer Schleife darauf, dass eine Datei in einem Verzeichnis erscheint. Wenn dies der Fall ist, verwendet das Makro FTP, um die Datei zu übertragen (Abbildung 12).
&attach_input &label AGAIN |
Abbildung 12 - ftp4.cm - Makro, das auf das Erscheinen einer Datei wartet und dann überträgt
Das Problem bei diesem Ansatz ist, dass FTP eine Datei lesen kann, die noch geöffnet ist und gerade geschrieben wird. Bei einer großen Datei oder wenn Ihr Timing schlecht ist, wird nur ein Teil der Datei übertragen (Abbildung 13).
1234567890 |
Abbildung 13 - nur ein Teil der Datei wird übertragen
1234567890 |
Abbildung 14 - vollständige Datei
Es reicht nicht aus zu prüfen, ob die Datei existiert, Sie müssen auch prüfen, ob die Datei gesperrt ist (Abbildung 15).
&attach_input |
Abbildung 15 - ftp5.cm - Überprüfung, ob eine Datei vor der Übertragung freigeschaltet ist
Am besten verwenden Sie also die .netrc-Datei, in der Ihre Benutzerkennung und Ihr Kennwort gespeichert sind, und ein VOS-Befehlsmakro mit der Möglichkeit, den command_status nach jeder Anforderung zu überprüfen, um die tatsächlichen Anforderungen zu kontrollieren. Prüfen Sie außerdem vor der Übertragung einer Datei, ob sie nicht gesperrt ist.
Einige von Ihnen fragen sich, was es mit SFTP auf sich hat. Die Automatisierung von Dateiübertragungen mit SFTP ist etwas völlig anderes und wird in meinem nächsten Blog behandelt.