Gdy wszystko, co masz, to konsola szeregowa (powiedzmy przez telnet za pośrednictwem serwera terminali), jakie metody można zastosować do przesyłania plików do / z hosta?
Wytnij / wklej działa w przypadku małych / możliwych do wydruku materiałów, a ja grałem z kombinacją uuencode / uudecode (z gzip), które obsługują to, co nie jest drukowalne, ale to wszystko jest bardzo ograniczające.
solaris
console
serial-console
Stephen Paul Lesniewski
źródło
źródło
Odpowiedzi:
Programy konsoli szeregowej¹, których użyjesz na drugim końcu połączenia, będą miały sposób na przesłanie pliku na stronę zdalną. To, jak dokładnie to zrobisz, zależy od zasobów dostępnych w systemie zdalnym.
Mam
lrzsz
lubkermit
po drugiej stronieNajłatwiejszym przypadkiem jest, jeśli na stronie zdalnej jest zainstalowany solidny program do przesyłania plików binarnych, taki jak
lrzsz
lubkermit
. To było kiedyś bardziej powszechne niż dzisiaj, ale twój konkretny system może nadal mieć jeden z nich.Program konsoli szeregowej, którego używasz po stronie lokalnej, prawie na pewno ma sposób na przesłanie Zmodem lub Kermit, co pozwala wysłać wszystko, czego potrzebujesz bezpośrednio.
W przypadku Zmodem po prostu wpisz
rz
w zdalnym systemie, który wysyła specjalny ciąg znaków, który lokalny terminal szeregowy powinien zrozumieć, powodując wyświetlenie okna dialogowego wyboru plików.Kermit jest prostszym protokołem, dlatego w takim przypadku musisz rozpocząć transfer ręcznie.
Nie mam programu do przesyłania plików binarnych, ale mam
uuencode
/base64
Istnieje wiele korzyści z wykorzystaniem odpowiedniego programu transferu plików binarnych jak
lrzsz
lubkermit
: efektywność, sum kontrolnych, automatycznych prób, poronionych wznowienia transferu, wielokrotnego przesyłania plików, itp, ale są to luksusy . Jeśli musisz wysłać tylko jeden plik lub rzadko wysyłasz pliki, możesz uniknąć przesyłania plików ASCII.Ponieważ protokoły terminali interpretują wiele wartości bajtów występujących w pliku danych binarnych, nie można wysłać pliku bezpośrednio przez to samo połączenie; jeśli to zrobisz, kod emulacji terminalu na obu końcach spróbuje zinterpretować niektóre dane, uszkadzając dane i prawdopodobnie wprowadzając w błąd także kod obsługi terminalu.
Można obejść ten problem, kodując dane binarne w bezpieczny podzbiór ASCII po stronie lokalnej, a następnie przekształcając je z powrotem w surowe dane binarne po stronie zdalnej. To jest to, co
uuencode
ibase64
programy zrobić, różnią się tylko drobnymi wyboru algorytmu.W systemie lokalnym kodujesz plik: ²
Następnie wpisz to polecenie w systemie zdalnym i wyślij plik za pomocą funkcji „Przesyłanie ASCII” na lokalnej konsoli szeregowej:
Po zakończeniu przesyłania pliku naciśnij, Ctrl-Caby wyjść
cat
. Teraz masz zdekodowany plik w systemie zdalnym, tak jak chcesz.Ale mam wiele plików do wysłania, a transkodowanie ASCII do druku to ból!
Nie jest trudno załadować się na wyższy poziom technologii. Jeśli zdalny system ma kompilator C, możesz użyć wcześniejszej techniki, aby wysłać zdalnemu systemowi kopię
lrzsz
kodu źródłowego. Po stronie lokalnej:Następnie w systemie zdalnym wpisz to za pomocą programu konsoli szeregowej:
Po uruchomieniu pierwszego polecenia wykonaj „przesyłanie ASCII”
lrzsz.tgz.uue
pliku do systemu zdalnego. Rurociąg akceptuje nieokodowane dane i dekoduje je do binarnego pliku tar, który można rozpakować i skompilować.Ale nie mam kompilatora C w systemie zdalnym
Jeśli nie mają nawet kompilator na zdalnym systemie, można przejechać skompilować ten
rz
program (lub cokolwiek) w systemie lokalnym i wysłać go do systemu zdalnego przy użyciu powyższej techniki.Przypisy:
minicom , picocom , PuTTY , VanDyke CRT ...
Musisz podać nazwę pliku wejściowego do tej wersji
uuencode
dwa razy, raz, aby nazwać źródło danych wejściowych, i jeszcze raz zadeklarować, co system zdalny powinien wywołać plik, gdy dekoduje dane do pliku wyjściowego. Można sobie wyobrazić, że system zdalny ma inną nazwę dla pliku wyjściowego.Twoja lokalna wersja
uuencode
może zachowywać się inaczej.źródło
Zasadniczo musisz korzystać z metod sprzed internetu, aby przesyłać dane za pośrednictwem łącza szeregowego, i musisz mieć sposób na otrzymanie przelewu po drugiej stronie. Oczywiście najlepszym sposobem na to jest użycie ZMODEM, co oznacza, że musisz mieć narzędzie takie jak
sz
już po stronie odbierającej. Jednak nie zawsze jest to możliwe, na przykład, gdy odbiorcą jest router bez sieci.Jedynym możliwym sposobem wykonania tego transferu jest bezpośrednio kanał, przy użyciu bezpiecznego ASCII terminala, w czystym stylu sprzed 8-bitów. Użyję bardziej nowoczesnych narzędzi, które, mam nadzieję, są zainstalowane na większości systemów.
Nadawca:
Najpierw kodujemy nasz plik
Teraz upewnij się, że twoje polecenie wysyłania pliku com to
ascii-xfr
, to była moja linia poleceń połączeniaZwykle chcemy
ascii-xfr
po stronie odbierającej, ale ponieważ go nie mamy,-n
działa to w ten sposób, zachowując prawidłowe zakończenia linii.Odbiorca:
Po nawiązaniu połączenia przejdź do katalogu, w którym chcesz odebrać plik.
Na Picocom, po prostu CTRL + A + S i podaj pełną ścieżkę pliku, który wysyłam. Po zakończeniu przesyłania musisz nacisnąć CTRL + c, aby to przerwać
cat
.Teraz dekodujemy plik,
Zrób wszystko, co możliwe, aby sprawdzić, czy plik jest IDENTYCZNY w stosunku do tego, który wysłałeś, ponieważ transfer ASCII nie ma ochrony sumy kontrolnej. Moje pole odbiorcze miało
sha512sum
, ale wystarczyło dowolne polecenie sumy kontrolnej. Po ręcznym potwierdzeniu zgodności sum możesz założyć, że transfer się powiódł!źródło
\r\n
lub po prostu\n
oba działają, nawet jeśli zostaną „naprawione” po drodze. Nie przypominam sobie od razu, czy jest to standard base64, czy tylko narzędzia, których użyłem, ale podejrzewam, że to w rzeczywistości standardowe zachowanie.Może powinieneś spróbować Minicom .
źródło
Nie wiem, czy to zadziałałoby, gdybyś tylko miał konsolę szeregową, ale jeśli w ogóle masz dostęp do sieci, możesz użyć
nc(1)
do kopiowania plików za pomocą TCP / IP.W powyższym przykładzie sklonowałem
sdbYYY
z pola źródłowego dosdaXXX
pola docelowego. Mój wybór 8675 dla numeru portu TCP był arbitralny; możesz użyć dowolnego portu, do którego masz dostęp. I to nie musi być urządzenie; może to być dowolny plik.W drugim przykładzie skopiowałem mój klucz publiczny rsa (
~/.ssh/id_rsa.pub
) i dodałem go do pliku kluczy autoryzowanych dla hosta docelowego.źródło
Użyłbym kermitowi , dziadkowie programów FileTransfer. Użyliśmy tego już na długo przed pojawieniem się Linuksa.
źródło