it-swarm-tr.com

Bir dosyayı ssh ile yerel sisteme geri kopyalayın

SSH aracılığıyla bir sistemde oturum açtıysam, başka bir terminal veya ekran oturumu açmadan ve scp veya benzer bir şey yapmadan veya uzak sistemden SSH yapmadan dosyayı yerel sistemime geri kopyalamanın bir yolu var mı? yerel sistem?

271
Shawn J. Goff

Ana bağlantı

Önceden plan yaparsanız en kolayı budur.

İlk kez bir ana bağlantı açın. Sonraki bağlantılar için, bağımlı bağlantıları mevcut ana bağlantı üzerinden yönlendirin. ~/.ssh/config içinde, bağlantı paylaşımının otomatik olarak gerçekleşmesini ayarlayın:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Varolan bir bağlantıyla aynı (ssh, oturum, makine) için bir ssh oturumu başlatırsanız, ikinci oturum ilk oturum üzerinden tünellenecektir. İkinci bağlantının kurulması yeni bir kimlik doğrulaması gerektirmez ve çok hızlıdır.

Etkin bağlantınız olsa da, hızlı bir şekilde şunları yapabilirsiniz:

Yönlendirme

Mevcut bir bağlantıda, ters bir ssh tüneli oluşturabilirsiniz. Ssh komut satırında, -R 22042:localhost:22 İleterek bir uzaktan yönlendirme oluşturun; burada 22042, uzak makinedeki diğer herhangi bir bağlantı noktası numarasından farklı olan rastgele seçilen bir sayıdır. Ardından, uzak makinedeki ssh -p 22042 localhost Sizi kaynak makineye geri bağlar; dosyaları kopyalamak için scp -P 22042 foo localhost: kullanabilirsiniz.

RemoteForward 22042 localhost:22 İle bunu otomatik hale getirebilirsiniz. Buradaki sorun, aynı bilgisayara birden fazla ssh örneği ile bağlanırsanız veya başka biri bağlantı noktasını kullanıyorsa, yönlendirmeyi alamamanızdır.

Başından beri uzaktan yönlendirmeyi etkinleştirmediyseniz, mevcut bir ssh oturumunda yapabilirsiniz. tip Enter ~C Enter -R 22042:localhost:22 Enter. Daha fazla bilgi için kılavuzdaki “Karakterlerden kaçış” konusuna bakın.

Bu Sunucu Hatası iş parçacığı içinde bazı ilginç bilgiler de var.

Kopyala yapıştır

Dosya küçükse, yazıp terminal çıkışından kopyalayıp yapıştırabilirsiniz. Dosya yazdırılamayan karakterler içeriyorsa base64 gibi bir kodlama kullanın.

 remote.example.net $ base64 <dosyam 
  (çıktıyı kopyala) 
 local.example.net $ base64 -d> dosyam 
  (pano içeriğini yapıştır) Ctrl+D

Daha uygun bir şekilde, X iletme etkinse, dosyayı uzak makineye kopyalayın ve yerel olarak yapıştırın. xclip veya xsel içine veri girip çıkarabilirsiniz. Dosya adını ve meta verileri korumak istiyorsanız arşivi kopyalayıp yapıştırın.

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -

Başka bir (IMO) kolay yol:

# to remote Host
cat localfile.conf | ssh [email protected] 'cat -> /tmp/remotefile.conf'

# from remote Host
ssh [email protected] 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

Veya GUI benzeri bir şey tercih ediyorsanız, Midnight Commander deneyin. Özelliği çağırırlar Shell-Link. Çoğu dağıtım paket sistemlerinde mc olarak bulunur.

75
Florian Fida

SSH, kaçış karakteriyle (varsayılan olarak ~) Birkaç komutu destekliyor:

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

!args İstediğiniz şeye en yakın görünüyor. /etc/ssh_config Komutlarının çalışabilmesi için ~C Dosyanızda PermitLocalCommand özelliğinin olması gerektiğini unutmayın (bkz. man ssh_config).

ssh_config İçinde bir ControlMaster ayarladıysanız aynı ssh oturumunu yeniden kullanabilirsiniz. Eğer bunu yaparsan:

$ ~C
ssh> !scp file [email protected]:

ssh oturumundan teknik olarak hiç ayrılmadınız ve yeniden kimlik doğrulaması yapmanız gerekmez. Muhtemelen istediğinden daha karmaşık, ama başka bir kolay yol düşünemiyorum.

54
Corey Henderson

Bunların hepsi çok karmaşık yöntemlerdir.
Uzak dosya sistemini sshfs ile yerel makinenize monte edebilirsiniz:

mkdir -p /mnt/sshfs

[email protected]:~# sshfs 192.168.1.2:/ /mnt/sshfs
[email protected]:~# umount /mnt/sshfs

Ardından dosyayı nautilus, gnome, konqueror, yunus, bash veya başka bir şeyle kopyalayabilirsiniz.

38
Quandary
  • Dosya aktarımı kullanımı için mevcut bir ssh yan kanalını etkili bir şekilde aşırı yükleyen değiştirilmiş bir ssh aracısı olan ssh-xfer kullanın.
  • zssh kullanın, ssh üzerinde etkili bir şekilde zmodem. Eğer hiç rzsz kullandıysanız bu çok tanıdık gelecektir.
  • Tersine çevirmek (-R, uzaktan yerel konum için) veya ileri (-L, yerel-uzak) bağlantı noktalarının dosya aktarımlarını çalıştırması için, diğer uçta bazı dosya aktarma arka plan programlarınız olduğunu varsayarsak.

Ama bunların hiçbirine gerçekten ihtiyaç duyulmuyor, IMO. SSH protokolü, tek bir bağlantıda birden çok kanalı destekler ve OpenSSH istemcisi çoğullamayı destekler. ControlMaster ve ControlPathkurulum (ControlPersist seçeneğine sahip olduğunuzu varsayarsak,

# ilk bağlantı
 $ ssh uzaktan 
 
 # orijinal ssh ile aynı bağlantı üzerinden çoğullayacak
 $ sftp uzaktan 
15
ephemient

Daha da basit bir yaklaşım: Filezilla'yı (veya favori ftp tarayıcınızı) açın, aynı siteye bir ssh bağlantısı açın, dosyayı bulun ve yerel dosya yapınıza sürükleyin. Filezilla'da yeniyseniz, bir dahaki sefere hızlı bağlantı için "site yöneticisi" özelliğini kullanın.

Evet, bunun çoğunuz için açık olduğunu biliyorum (ve tam olarak nokta üzerinde değil), ancak bu iş parçacığını yalnızca terminal çözümü arayan bulan bazı (benim gibi) açık olanı göz ardı etmiş olabilir.

9
Larry Jones

En iyi ve en verimli çözüm olarak bulduğum şey xclip-copyfile ve xclip-pastefile.

Sunucuda xclip-copyfile veya bir veya daha fazla dosyayı kopyalamak için. Bu dosyalar daha sonra yerel sunucunuzda kullanılabilir. Orada xclip-pastefile.

Bu, scp kullanma veya yerel bir ssh sunucusuna sahip olma ihtiyacını atlar. Bunu cygwin ile birlikte kullanıyorum. Tek sorun, zaten yoksa xclip kurulumunu gerektirir. Oh, ve bu ikili dosyalarla da çalışır.

8
Robert

Kullanabileceğimiz birçok nedenden biri SecureCRT - pratik olan yerlerde açık kaynaklı yazılımları tercih etmenize rağmen - dosya aktarımı yapmanın kolaylığıdır. F/OSS dünyasında doğrudan bir yedek yoktur.

SecureCRT, 1990'ların ortasında saf bir Windows programı olarak başladı, ancak Mac OS X ve Linux'a taşındı birkaç yıl önce .

SecureCRT, SSH'de olduğunuz bir sisteme ve sistemden dosya aktarmak için üç ana özelliğe sahiptir:

  • ZModem , YModem , XModem , Kermit ​​ve ASCII - SecureCRT, çeşitli bant içi dosya aktarım protokollerini destekleyen eski tip bir terminal emülatörüdür.

    En kolay kullanım ZModem'dir. Uzak komut satırına sz file-to-download gibi bir şey yazdığınızda, uzak sz programı, SecureCRT'ye hemen file-to-download varsayılan indirme dizinine.

    Hoş bir dokunuş, indirme dizininin oturum başına özelleştirilebilir olmasıdır. Bunu, ana ofis dosya sunucumuzda site başına dizinlere sahip olmak için kullanırız, bu nedenle indirilen dosyaları manuel olarak sıralamamız gerekmez.

    (szlrzsz paketinin bir parçası olan "ZModem gönder" programıdır. Zaten çoğu Unixy sistemi için paketlenmiştir. Herhangi bir nedenle uzak sisteminiz zaten kurulu değil ve kolayca bir ikili paket yükleyemezsiniz, kaynak paket küçük ve son derece taşınabilir. Birden fazla kez, bir lrzsz"sharchive göndermek zorunda kaldım " veya uuencode 'd tarball soyulmuş bir uzak sisteme ZModem dosyalarını bulabildim.)

  • [~ # ~] sftp [~ # ~] - SecureCRT'nin sıkıca entegre edilmiş bir temel SFTP uygulaması var.

    "Sıkıca tümleşik" derken, SFTP menü komutunu veya klavye kısayolunu verdiğinizde, aynı SSH bağlantısı üzerinden uzak siteye bağlı yeni bir sekme açar. Böylece, tekrar oturum açmanız gerekmez ve bağlantı aynı sunucuya ayrı bir SFTP bağlantısı açmış olduğunuzdan biraz daha hızlı kurulur.

    VanDyke Yazılımının ayrı bir dosya aktarım ürünü olduğu için SFTP özelliğini "temel" olarak karakterize ediyorum, SecureFX . Dahili SFTP istemcisinden daha özelliklidir ve SecureCRT ile entegre olur.

    SecureCRT'nin SFTP özelliği, ZModem yapılandırmasından ayrı varsayılan uzak ve yerel dizinleri yapılandırmanıza izin verir.

    Bu SFTP özelliği, OpenSSH'nin sftp programını taklit eden temel bir komut satırı türüne sahiptir; Tab komut tamamlama. Bu nedenle, somefile.tar.gz adlı uzak bir dosyayı almak get so kadar kolay olabilirTabEnter.

  • Sürükle ve bırak - Bir dosyayı terminal penceresine sürükleyip bırakırsanız, sizin için otomatik olarak rz yazar ve dosyayı göndermeye başlar.

    Alternatif olarak, bir SFTP sekmesi açabilir ve bir dosyayı SFTP aracılığıyla göndermek için bu sekmeye bırakabilirsiniz. Bu nedenle, uzak bir sisteme dosya göndermek kadar basit olabilir Alt-P, sürükle, bırak.

    Muhtemelen TCP tabanlı bir protokol olduğu için SFTP aracılığıyla aktarımların çok daha hızlı gerçekleştiğini görüyoruz, bu nedenle büyük sürgülü pencereler modern TCP/IP yığınları yararlanıyor. ZModem, 64 kiloluk blok büyüklüğünün "büyük" olduğu günlerde tasarlanmıştır. Böylece, bir bağlantıdaki potansiyel hızın büyük bir kısmı ZModem'e batırılırken, her iki uç blok aktarım onaylarını bekler.

    Sürükle ve bırak çalışma modu hakkında güzel bir şey, ZModem kullanmanın streslerinden birini ortadan kaldırmasıdır. Uzaktaki sisteme rz yazdığınızda, SecureCRT otomatik olarak bir dosya seçici açar. Daha sonra uzak taraf zaman aşımına uğramadan önce dosyayı bulmak ve seçmek için bir dakikanız olur. Bu, hoş olmayan, zamana karşı bir yarış ortamı yaratır. Sürükle ve bırak, dosyayı boş zamanlarınızda bulmanıza ve ardından fareyi tek bir hızlı hareketle aktarmaya başlamanıza olanak tanır.

    Aktarımı açık bir rz komutuyla başlatan manuel yöntemi hala kullanıyoruz. Bunun nedeni, SecureCRT'nin dosya sunucusundaki her zaman belirli bir uzak sitenin çalıştırdığı yazılımın en son yapısını içeren klasörü işaret ettiğimiz oturum başına yükleme dizinini yapılandırmanıza izin vermesidir. Bu tür aktarımlar için, zamana karşı bir yarış yoktur, çünkü dosya seçici başlamak için doğru yerde açılır.

3
Warren Young

"!" dosyayı dosyanızın ASCII temsiline dönüştürmek için (ör. ! uuencode myfile.bin >uuencode.dat). Sonra kullan ! cat uuencode.dat >target.dat. Bundan sonra hedef tarafta uudecode kullanın: ! uudecode target.dat >myfile.bin

1
Nils