Tüm sahip olduğunuz bir seri konsol olduğunda bir ana bilgisayara nasıl dosya gönderilir?


21

Sahip olduğunuz tek şey bir seri konsol olduğunda (örneğin bir terminal sunucusu üzerinden telnet üzerinden), bir ana makineye / ana makineden dosya aktarmak için hangi yöntemler kullanılabilir?

Kes / yapıştır küçük / yazdırılabilir şeyler için çalışır ve uuencode / uudecode (gzip ile) bir arada yazdırılamaz ele bir kombinasyon ile oynadım ama hepsi çok sınırlayıcı.


Yardımcı programların kullanılabilirliği hakkında bıraktığınız bazı yorumlar göz önüne alındığında, platformu adlandırabilir ve / veya bulunduğunuz ortamı ana hatlarıyla belirtebilmeniz yardımcı olacaktır. Aksi takdirde, stok Kermit / XMODEM / YMODEM / Terminal cevapları üzerinden ZMODEMk ...
Avery Payne

Günümün çoğunu Solaris kutusunun arkasında geçiriyorum. Yani bu terimlerle, sahip olduğunuz tek şey SUNCreq (ya da belki SUNWCuser) olsaydı, cevap ne olurdu?
Stephen Paul Lesniewski

sadece 5 yıl geç,: P Şimdi cevabımı kabul edebilirsin, çünkü tam olarak istediğin buydu .... ama muhtemelen bugün ihtiyacım yok.
JM Becker

Yanıtlar:


13

Bağlantının diğer ucunda kullanacağınız seri konsol programları¹ uzak tarafa bir dosya göndermenin bir yolunu bulur. Tam olarak nasıl gideceğiniz, uzak sistemde hangi kaynakların bulunduğuna bağlıdır.

Ben Var lrzszya kermitUzaktan Yakası'nda

En kolay durum, uzak tarafta lrzszveya gibi sağlam bir ikili dosya aktarım programı yüklü olmasıdır kermit. Bu bugünkünden bir kez daha yaygındı, ancak sisteminizde bunlardan biri hala olabilir.

Yerel tarafta kullandığınız seri konsol programının neredeyse kesinlikle Zmodem veya Kermit yüklemesi yapmanın bir yolu vardır, bu da ihtiyacınız olan her şeyi doğrudan göndermenizi sağlar.

Zmodem durumunda rz, yerel seri terminalin anlaması gereken özel bir dize göndererek uzaktaki bir sisteme yazın ve dosya seçici iletişim kutusu açmasına neden olun.

Kermit daha basit bir protokoldür, bu nedenle aktarımı manuel olarak başlatmanız gerekir.

İkili Dosya Aktarım Programım Yok, uuencode/base64

Orada gibi düzgün bir ikili dosya aktarım programı kullanarak çeşitli yararları vardır lrzszya kermit: vb verimliliği, checksum'la, otomatik yeniden deneme, iptal edildi transferi sürdürülmesi, çoklu dosya transferi, fakat bunlar lüks . Yalnızca bir dosya göndermeniz gerekiyorsa veya dosyaları nadiren gönderiyorsanız, ASCII yüklemelerinden kurtulabilirsiniz.

Çünkü Terminal protokoller bir ikili veri dosyasındaki meydana bayt değerleri birçok yorumlamak, aynı bağlantı üzerinden doğrudan dosya göndermek olamaz; bunu yaparsanız, her iki uçtaki terminal öykünme kodu, bazı verileri yorumlamaya, verileri bozmaya ve muhtemelen terminal işleme kodunu karıştırmaya çalışacaktır .

İkili verileri yerel taraftaki güvenli bir ASCII alt kümesine kodlayıp sonra uzak taraftaki ham ikili verilere dönüştürerek bu sorunu çözersiniz. Bu nedir uuencodeve base64programlar sadece küçük algoritma seçimlerinde farklı yapın.

Yerel sistemde dosyayı kodlarsınız: ²

$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz

Sonra bu komutu uzaktaki sisteme yazıp dosyayı yerel seri konsolun "ASCII upload" özelliğini kullanarak gönderirsiniz:

$ cat | uudecode

Dosya yükleme işlemi bittiğinde, Ctrl-Cçıkmak için tuşuna basın cat. Şimdi kodunu çözdüğünüz dosyayı istediğiniz gibi uzak sistemde bulabilirsiniz.

Ama Gönderilecek Çok Dosyam Var ve Yazdırılabilir ASCII Kod Dönüştürme Bir Acı!

Kendinizi daha yüksek bir teknolojiye kadar önyüklemek zor değildir. Uzaktaki sistemin bir C derleyicisi varsa, uzaktaki sisteme lrzszkaynak kodun bir kopyasını göndermek için önceki tekniği kullanabilirsiniz . Yerel tarafta:

$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz

Daha sonra uzaktaki sisteme bunu seri konsol programı aracılığıyla yazın:

$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally

İlk komutu başlattıktan sonra lrzsz.tgz.uue, uzak sisteme dosyanın "ASCII yüklemesini" yapın . Boru hattı, kodlanmış verileri kabul eder ve paketini açıp oluşturabileceğiniz bir ikili tarball'a deşifre eder.

Ama Uzak Sistemde C Derleyicim Yok

Hatta uzak sistemde bir derleyici yoksa, şunları yapabilirsiniz çapraz derlemerz yerel sistemde (ya da herneyse) program ve yukarıdaki tekniği kullanılarak uzaktan sisteme gönderebilir.


Dipnotlar:

  1. minicom , picocom , PuTTY , VanDyke CRT ...

  2. Girdi dosyasının adını bu sürüme uuencodeiki kez, bir kez de girdi verilerinin kaynağını adlandırmanız ve uzak sistemin verileri bir çıktı dosyasına çözerken dosyayı ne çağırması gerektiğini bildirmeniz gerekir. Uzaktaki sistemin çıktı dosyası için farklı bir ada sahip olmasını düşünebilirsiniz.

    Yerel sürümünüz uuencodefarklı davranabilir.


Fantastik, bu sorunun kermit'ten bahseden bir cevabı olduğunu umuyordum! +1;)
Tim

Bu iyi bir cevap, bu "Ama Sahip değilim" bölümünü seviyorum. Ne yazık ki, oldukça pop şeylerde durur ve gerçekten derinlere inmez. Sadece ASCII kodları farklı mimariler için ikili çalıştırılabilir dosyalar oluşturma? Bootstrap için: retrocomputing.stackexchange.com/questions/4672/…
pfalcon

5

Temel olarak bir seri tty üzerinden aktarım için internet öncesi yöntemleri kullanmanız ve diğer taraftan aktarımı almanın bir yolunun olması gerekir. Açıkçası bunu yapmanın en iyi yolu ZMODEM kullanmaktır, yani szzaten alıcı uçta gibi bir alete sahip olmanız gerekir . Bununla birlikte, örneğin alıcı hedef ağsız bir yönlendirici olduğunda bu her zaman mümkün değildir.

Bu aktarımı yapmanın tek yolu, 8-bit öncesi temiz stilde terminal güvenli ASCII kullanarak doğrudan kanalın üzerindedir. Çoğu sistemde yüklü olmasını umduğum daha modern araçlar kullanacağım.

Gönderen:

Önce dosyamızı kodluyoruz

base64 file.tar.gz > file.tar.gz.b64

Şimdi com send-file komutunuzun olduğundan emin olun ascii-xfr, bu benim bağlantı komut satırımdı

picocom -f n -p n -d 8 -b 115200  --send-cmd "ascii-xfr -snv" /dev/ttyS0

Normalde ascii-xfralıcı tarafta istiyoruz , ancak sahip olmadığımızdan, -ndoğru satır sonlarını koruyarak bu sorunu çözüyor.

Alıcı:

Bağlandığımıza göre, alınan dosyayı istediğiniz dizine gidin.

cd /tmp/
cat > file.tar.gz.b64

Picocom'da sadece CTRL + a + s tuşlarına basıyorum ve gönderdiğim dosyanın tam yolunu giriyorum. Aktarım tamamlandığında, bunu kırmak için CTRL + c tuşlarına basmanız gerekir cat.

Şimdi dosyayı çözüyoruz,

base64 -d file.tar.gz.b64 > file.tar.gz

Bir ASCII aktarımının sağlama toplamı koruması olmadığından, dosyanın gönderdiğiniz dosya için KİMLİKLİ olduğunu doğrulamak için elinizden geleni yapın. Alıcı kutum vardı sha512sum, ancak herhangi bir sağlama toplamı komutu yeterli olurdu. Toplamların eşleşmesini manuel olarak onayladıktan sonra, aktarımın başarılı olduğunu varsayabilirsiniz!


(Ve iki yıl sonra ...) satır sonlarını çağıran sistemler arasında dosya aktarma deneyimimde (teşekkürler Microsoft!), Base64 kodlama / kod çözme satır sonu stilini umursamıyor. \r\nya da \nher ikisi de "sabit" olsalar bile çalışır. Base64 standardında mı yoksa sadece kullandığım araçlarda mı olduğunu hatırlamıyorum, ama aslında standart davranış olduğundan şüpheleniyorum.
Andrew Henle

5

Belki de minicom'u denemelisin.


Bu, kaynak ana bilgisayarda 'sx' veya 'sz' gibi bir şey gerektirmez mi?
Stephen Paul Lesniewski

4
Hayır, minicom kendi dosya xfers'ını işler. sx, sy, sz ve rx, ry, rz genellikle lszrz veya benzer bir şekilde adlandırılan paketlerde bulunan ayrı programlardır. Gerçi sz ve rz kullanmanızı öneririm. Küçük, basit ve ne yaparsa yapsın. Minicom bütün bir terminal emülatörüdür.
reiche

4
Bu cevap doğru değil. Minicom, dosya aktarımları için lrzsz'yi oluşturur. Minicom kendi dosya aktarımlarını yapamaz ve işlemez.
Jonathan Cline IEEE

5

Tüm sahip olduğunuz bir seri konsol olsaydı bunun işe yarayıp yaramayacağını bilmiyorum, ancak ağ erişiminiz varsa, nc(1)TCP / IP kullanarak dosyaları kopyalamak için kullanabilirsiniz .

# WARNING: Depending on your setup, this could make your system unbootable
root@destination-box.local # nc -l 8675 | dd of=/dev/sdXXX
root@source-box.local # dd if=/dev/sdYYY | nc destination-box.local 8675

Yukarıdaki örnekte, sdbYYYkaynak kutusundan sdaXXXhedef kutusuna kadar klonladım . TCP bağlantı noktası numarası için 8675 seçimim keyfiydi; erişiminiz olan herhangi bir bağlantı noktasını kullanabilirsiniz. Ve bu bir cihaz olmak zorunda değil; herhangi bir dosya olabilir.

kevin@destination-box.local $ nc -l 12345 >> ~/.ssh/authorized_keys
kevin@source-box.local $ cat ~/.ssh/id_rsa.pub | nc destination-box.local 12345

İkinci örnekte, rsa genel anahtarımı ( ~/.ssh/id_rsa.pub) kopyaladım ve hedef ana bilgisayarın yetkili anahtarlar dosyasına ekledim.


5
İlk fikrinizin üzerinde büyük bir kırmızı uyarı işareti önerebilir miyim? Öğrenmek için kalbi olan yalnız bir ruh, elbette aşağıdaki paragrafı okumadan, sadece dosyaları kopyalama umuduyla böyle bir şey yürütebilir :)
reiche

2

Dosya aktarım programlarının büyükannesi olan kermit kullanırdım . Bunu Linux olmadan çok önce kullandık.


ahh evet .. Bunu hatırlıyorum ama bu durumda kermit kaynak ana bilgisayara kurulmuyor.
Stephen Paul Lesniewski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.