Wenn Sie nur eine serielle Konsole haben (z. B. über Telnet über einen Terminalserver), welche Methoden können zum Übertragen von Dateien auf einen Host bzw. von einem Host verwendet werden?
Das Ausschneiden / Einfügen funktioniert für das kleine / druckbare Material und ich habe mit einer Kombination aus Uuencode / Uudecode (mit GZIP) gespielt, um das nicht druckbare zu behandeln, aber es ist alles sehr einschränkend.
solaris
console
serial-console
Stephen Paul Lesniewski
quelle
quelle
Antworten:
Die seriellen Konsolenprogramme¹, die Sie am anderen Ende der Verbindung verwenden, haben eine Möglichkeit, eine Datei an die Remote-Seite zu senden. Wie genau Sie vorgehen, hängt davon ab, welche Ressourcen auf dem fernen System verfügbar sind.
Ich habe
lrzsz
oderkermit
auf der Remote-SeiteDer einfachste Fall ist, wenn auf der Remote-Seite ein solides Programm zur Übertragung von Binärdateien installiert ist, z. B.
lrzsz
oderkermit
. Dies war einmal häufiger als heute, aber Ihr spezielles System könnte immer noch eines davon haben.Das serielle Konsolenprogramm, das Sie lokal verwenden, bietet mit ziemlicher Sicherheit die Möglichkeit, einen Zmodem- oder Kermit-Upload durchzuführen, mit dem Sie alles, was Sie benötigen, direkt senden können.
Im Fall von Zmodem geben Sie einfach
rz
auf dem Remote-System ein, das eine spezielle Zeichenfolge ausgibt, die das lokale serielle Terminal verstehen sollte, wodurch ein Dialogfeld für die Dateiauswahl geöffnet wird.Kermit ist ein einfacheres Protokoll. In diesem Fall müssen Sie die Übertragung manuell starten.
Ich habe kein Programm zum Übertragen von Binärdateien, aber ich habe
uuencode
/base64
Die Verwendung eines ordnungsgemäßen binären Dateiübertragungsprogramms wie
lrzsz
oder hat mehrere Vorteilekermit
: Effizienz, Prüfsummenbildung, automatische Wiederholungsversuche, Wiederaufnahme der Übertragung abgebrochen, mehrfache Dateiübertragung usw., aber dies ist Luxus . Wenn Sie nur eine Datei senden müssen oder nur selten Dateien senden, können Sie ASCII-Uploads durchführen.Da Terminalprotokolle viele der in einer Binärdatendatei vorkommenden Bytewerte interpretieren, können Sie die Datei nicht direkt über dieselbe Verbindung senden. In diesem Fall versucht der Terminal-Emulationscode an beiden Enden, einige der Daten zu interpretieren. Dadurch werden die Daten beschädigt, und der Code für die Terminal-Verarbeitung wird möglicherweise ebenfalls verwirrt .
Sie umgehen dies, indem Sie die Binärdaten auf der lokalen Seite in eine sichere Teilmenge von ASCII codieren und sie dann auf der Remote-Seite wieder in Binärrohdaten umwandeln. Dies ist, was die Programme
uuencode
undbase64
tun, die sich nur in geringfügigen Algorithmuswahlen unterscheiden.Auf dem lokalen System codieren Sie die Datei: ²
Anschließend geben Sie diesen Befehl auf dem fernen System ein und senden die Datei mit der Funktion "ASCII-Upload" der lokalen seriellen Konsole:
Wenn der Datei-Upload abgeschlossen ist, klicken Sie auf Ctrl-C, um auszusteigen
cat
. Jetzt haben Sie Ihre dekodierte Datei auf dem Remote-System, wie Sie wollten.Aber ich muss viele Dateien senden, und druckbare ASCII-Transkodierung ist mühsam!
Es ist nicht schwer, sich auf ein höheres technologisches Niveau zu begeben. Wenn das ferne System über einen C-Compiler verfügt, können Sie mit der vorherigen Technik eine Kopie des
lrzsz
Quellcodes an das ferne System senden . Auf der lokalen Seite:Geben Sie dann auf dem fernen System Folgendes über das serielle Konsolenprogramm ein:
Nachdem Sie den ersten Befehl gestartet haben, führen Sie einen "ASCII-Upload" der
lrzsz.tgz.uue
Datei auf das ferne System durch. Die Pipeline akzeptiert die unkodierten Daten und dekodiert sie für Sie in einen Binär-Tarball, den Sie entpacken und erstellen können.Ich habe aber keinen C-Compiler auf dem Remote-System
Wenn auf dem fernen System noch nicht einmal ein Compiler vorhanden ist, können Sie das (oder was auch immer) Programm auf dem lokalen System übergreifend kompilieren
rz
und mit der oben beschriebenen Technik an das ferne System senden.Fußnoten:
Minicom , Picocom , PuTTY , VanDyke CRT ...
Sie müssen dieser Version
uuencode
den Namen der Eingabedatei zweimal geben, einmal, um die Quelle der Eingabedaten zu benennen, und erneut, um zu deklarieren, wie das ferne System die Datei aufrufen soll, wenn es die Daten in eine Ausgabedatei dekodiert. Es ist denkbar, dass das ferne System einen anderen Namen für die Ausgabedatei hat.Ihre lokale Version von
uuencode
verhält sich möglicherweise anders.quelle
Grundsätzlich müssen Sie vor dem Internet Methoden verwenden, um über eine Seriennummer zu übertragen, und Sie müssen eine Möglichkeit haben, die Übertragung auf der anderen Seite zu empfangen. Offensichtlich ist der beste Weg, dies zu tun, die Verwendung von ZMODEM, was bedeutet, dass Sie ein Werkzeug haben müssen, wie es
sz
bereits auf der Empfangsseite vorhanden ist. Dies ist jedoch nicht immer möglich, wenn das empfangende Ziel beispielsweise ein Router ohne Netzwerk ist.Die einzige Möglichkeit, diese Übertragung durchzuführen, ist die direkte Übertragung über den Kanal unter Verwendung von terminal-sicherem ASCII in einem sauberen 8-Bit-Stil. Ich werde modernere Tools verwenden, die hoffentlich auf den meisten Systemen installiert sind.
Absender:
Zuerst verschlüsseln wir unsere Datei
Stellen Sie nun sicher, dass Ihr Befehl com send-file lautet
ascii-xfr
. Dies war meine VerbindungsbefehlszeileNormalerweise wollen wir
ascii-xfr
auf der Empfängerseite, aber da wir es nicht haben,-n
funktioniert das, indem wir die richtigen Zeilenenden beibehalten.Empfänger:
Wechseln Sie nach dem Herstellen der Verbindung in das Verzeichnis, in dem Sie die empfangene Datei speichern möchten.
Auf picocom drücke ich einfach STRG + a + s und gebe den vollständigen Pfad der Datei ein, die ich sende. Sobald die Übertragung abgeschlossen ist, müssen Sie STRG + c drücken, um dies zu unterbrechen
cat
.Jetzt dekodieren wir die Datei,
Tun Sie alles, um sicherzustellen, dass die Datei mit der von Ihnen gesendeten identisch ist, da eine ASCII-Übertragung keinen Prüfsummenschutz hat. Meine Empfangsbox hatte
sha512sum
, aber jeder Prüfsummenbefehl würde ausreichen. Sobald Sie die Summenübereinstimmung manuell bestätigt haben, können Sie davon ausgehen, dass die Übertragung erfolgreich war!quelle
\r\n
oder einfach\n
beide funktionieren, auch wenn sie auf dem Weg "repariert" werden. Ich kann mich nicht ohne weiteres erinnern, ob dies im base64-Standard oder nur in den von mir verwendeten Tools enthalten ist, aber ich vermute, dass dies tatsächlich das Standardverhalten ist.Vielleicht solltest du es mit minicom versuchen.
quelle
Sie wissen nicht, ob dies funktionieren würde, wenn Sie nur eine serielle Konsole hätten. Wenn Sie jedoch überhaupt über Netzwerkzugriff verfügen, können Sie
nc(1)
Dateien mithilfe von TCP / IP kopieren.Im obigen Beispiel habe ich
sdbYYY
von einem Quellfeld in ein Zielfeld geklontsdaXXX
. Meine Wahl von 8675 für eine TCP-Portnummer war willkürlich; Sie können jeden Port verwenden, auf den Sie Zugriff haben. Und es muss kein Gerät sein; Es kann sich um eine beliebige Datei handeln.Im zweiten Beispiel habe ich meinen öffentlichen RSA-Schlüssel (
~/.ssh/id_rsa.pub
) kopiert und ihn der Datei mit den autorisierten Schlüsseln für den Zielhost hinzugefügt.quelle
Ich würde Kermit verwenden , den Großelternteil der Filetransfer-Programme. Wir haben das schon lange benutzt, bevor es Linux gab.
quelle