it-swarm-tr.com

Aktif bir SSH oturumu üzerinden dosya indirin

Aktif bir SSH oturumundan dosya indirmek istiyorum. Birçok durumda muhtemelen olabilir sadece SFTP, scp, rsync et al kullanın, ancak uzak sunucuda bu yöntemleri kullanamayacağım şekilde yükseltilmiş izinlerim olduğu zamanlar olabilir.

Ne demek istediğimi anlamakta zorlanıyorsanız, /root/ veya /var/log/auth.log içinden bir şey indirmek istediğinizi düşünün. Kök giriş devre dışı bırakıldı (çünkü biz aptal değiliz). Bu dosyayı nasıl aldın? Daha az korumalı bir yere kopyalayın ve sonra taşıyın mı? Bu clunky. Uzak yolun karmaşık veya geçici olduğu ya da yol bile olmadığı senaryoları da var çünkü yerel olarak saklanan bir uzak komutun çıktısını istiyorum. Uzaktan saklayın, sonra kopyalayın? Clunk!

Bunların sürümlerini elde etmenin birkaç daha yolsuz yolu var ancak ideal bir dünyada, mevcut SSH oturumunu bir kanal olarak kullanarak uzak sunucudan yerel yazma erişimine benzeyen bir şeyim olacaktı. Gibi bir şey (bu sadece sanatçının izlenimidir):

[email protected]: cp /root/cheesecake /local/

Ve sadece yerel cwd içinde görünür. İki yönlü erişim kötü bir şey olmaz.


Bu soruyu sorduğumdan bu yana sekiz yıl geçti ve gerçek bir yığın görüldü.

Soruyu çok daha idealist bir şeye yeniden çevirdim. Tam olarak şu anda mükemmel bir cevap olamayabileceğini biliyorum. İdealime yönelik tüm geçmiş ve gelecekteki çabalarım takdir edilmektedir.

86
Oli

Kontrol etmek isteyebilirsiniz zssh , evrende mevcuttur ve bu nedenle

Sudo apt-get install zssh

Ubuntu sunucunuzda ve istemcinizde ihtiyacınız var, ancak temelde zssh ile oturum açtığınızda, sadece 'ctrl- @' tuşlarına basarsınız ve bu, dosyalarınızı aşağıdan boruya geri göndermenizi sağlayan "Dosya aktarım modunu" getirir. istemci makineyi kullanın veya bunları müşteriden sunucuya yükleyin.

Ancak, scp için yeniden kimlik doğrulamanız veya yeni bir pencere açmanız gerekmez.

Eğer ssh anahtarlarını ve bir ssh aracısını kullanıyorsanız, kolayca yapabilirsiniz:

[enter]~[ctrl]-Z

Bu, ssh'yi arkaplan eder ve sonra sadece scp $!:/whatever/whatever .'

Dosya aktarıldıktan sonra, ssh'yi geri almak için fg.

Eğer ssh tuşlarını kullanmıyorsanız, en son OpenSSh sürümlerine eklenen "ControlMaster" ve "ControlPath" seçeneklerini kullanabilirsiniz, ancak bu zorlaşır, adam ssh_config'e bakın

34
SpamapS

Masaüstünüzde bir ssh sunucusu çalıştırdığınızı varsayalım (bunun etrafında yollar var, ancak hepsinin karmaşıklık ve muhtemelen güvenlik sorunları olduğunu düşünüyorum), ters ssh tüneli kurabilirsiniz. SSH dosyayı kolayca yerel sisteme kopyalayın. over nix.SE .

  • Tip Enter ~C Enter -R 22042:localhost:22 Enter Sunucunuzdan masaüstünüze bir ters bağlantı noktası iletme oluşturmak için (22042, 1024 ile 65534 arasında kullanılmayan herhangi bir bağlantı noktası numarası olabilir).
  • Ardından scp -P 22042 foo localhost:, sunucudaki geçerli dizindeki foo dosyasını masaüstündeki evinize kopyalayacaktır.
  • Şimdi, dosyayı yazarak masaüstündeki geçerli dizine taşıyın Enter ~ Ctrl+Z mv ~/foo . Enter fg Enter.

Ssh kaçış dizileri~ ile başlar; tilde yalnızca yeni bir satırdan sonra tanınır. ~ Ctrl+Z, ssh'ı arka plana koyar. ~C, bir yönlendirme oluşturabileceğiniz veya kaldırabileceğiniz bir komut satırına girer.

24
Gilles

Bunu standart ssh ile yapmanın bir yolunu buldum. Geçerli ssh bağlantısını çoğaltan, çalışma dizini uzaktaki makinede bulan ve belirlediğiniz dosyayı yerel makineye kopyalayan bir betiktir. Ssh config'inizde çok küçük 2 script (1 uzaktan kumanda, 1 yerel) ve 2 satır gerekiyor. Adımlar aşağıdaki gibidir:

  1. Bu 2 satırı ~/.ssh/config:

    ControlMaster auto
    ControlPath ~/.ssh/socket-%[email protected]%h:%p
    

    Şimdi machineX open ile ssh bağlantınız varsa, başka bir tane açmak için şifrelere ihtiyacınız olmaz.

  2. Uzak makinede ~/.grabCat.sh adlı 1 satırlık bir komut dosyası oluşturun.

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/$1
    
  3. Yerel makinede ~/.grab.sh adlı bir komut dosyası oluşturun.

    \#!/bin/bash
    [ -n "$3" ] && dir="$3" || dir="."
    ssh "$1" ".grabCat.sh $2" > "$dir/$2"
    
  4. ve grab.sh için bir takma ad verin (~/.bashrc veya her yerde):

    alias grab=~/.grab.sh
    

Hepsi bu kadar. Şimdi machineX:/some/directory için giriş yaptıysanız, yeni bir terminal açmanız yeterlidir.

grab machineX filename

Bu, dosyayı yerel makinedeki geçerli çalışma dizininize yerleştirir. "Kepçe" için üçüncü bir argüman olarak farklı bir konum belirleyebilirsiniz.

Not: Açıkçası, her iki komut dosyasının da "çalıştırılabilir" olması gerekir, yani chmod u+x filename.

10
user6702

İstemci makinenize (oturduğunuz makine) makineA ve şu anda SSH'lediğiniz makineye makine B MakineA deniyorsa, yerel makinenizde SSHD çalışıyor ve bağlantı noktası 22 açık olmalıdır. Sonra:

scp myfile machineA:

MachineB'deki myfile öğesini MachineA'daki MachineA ana dizine kopyalar. Bu, kullanıcı kimliğinin/şifrenin aynı olduğunu varsayar.

scp myfile machineA:/newdir/newname

Makine A'daki myfile bir MachineB'yi /newdir/newname öğesine kopyalar. Bu, kullanıcı kimliğinin/şifrenin aynı olduğunu varsayar.

scp MachineA:/path/to/my/otherfile . 

MachineA'daki MachineA dizinimden otherfile kopyasını alır ve MachineB makinesindeki geçerli çalışma dizinime yerleştirir (standart UNIX biçiminde "nokta" (.) Karakteri ile gösterilir). Bu, kullanıcı kimliğinin/şifrenin aynı olduğunu varsayar.

Kullanıcı kimliği/şifre aynı değilse, aşağıdakileri kullanın:

scp myfile [email protected]: dosya almak için.

scp [email protected]:/path/to/my/otherfile . dosya koymak için

SCP ile ilgili notlar:

cp komutunda olduğu gibi, scp, orijinal dosyanın izin ayarlarını kopyaya yaymak için bir -p seçeneğine sahiptir (aksi takdirde kopya, yeni dosyalar için normal ayarlarla yapılır) ve a - Dizin ağacının tamamını tek bir komutla kopyalamak için r seçeneği.

scp iki makine arasında tamamen şeffaf şifreli bir veri kanalı oluşturur, böylece ikili veriler (görüntüler veya çalıştırılabilir programlar gibi) doğru şekilde korunur. Bu, aynı zamanda, scp, "ascii" modunda ftp ile yapılabileceği gibi, farklı işletim sistemleri arasında otomatik hat sonu sonlandırma dönüşümünü gerçekleştiremediği anlamına gelir. Hepsi aynı satır sonu kuralını kullanan Unix sistemleri arasında kopyalama yaparken bu bir problem olmayacak.

5
LukeInDC

Dosyanız yeterince küçükse, onu base64 ile kodlayabilir ve ardından yerel olarak kodunu çözebilirsiniz:

 remote.example.net $ base64 <dosya 
  (çıktının kopyalanması) 
 local.example.net $ base64 -d> dosyam 
  (çıktıyı kopyala) Ctrl+D

Bunu nereden aldığımı (ve test ettiğimi) orijinal cevap: https://unix.stackexchange.com/a/2869/194134

2
wesalius

sunucuya ssh ile erişirseniz sftp ile de bağlanabilirsiniz. Filezilla istemcisini (GUI) el altında tutun ve bulunduğunuz yolu yapıştırın

enter image description here

2
jet

Aktif SSH bağlantısı üzerinden değil, ancak scp , ssh ile aynı mekanizmaları ve izinleri kullanarak dosyaları kopyalar.

1
msw

Bu, varsayılan bir ssh oturumu ile mümkün değildir, ancak yerel sisteminizde basit bir ftp veya rsh sunucusu gibi bir şey başlatan ve masaüstünüze bir tünel oluşturmak için gerekli seçeneklerle ssh çalıştıran ssh yerine bir komut dosyası kullanabilirsiniz. Bu sunucuya bağlanmak için.

1
JanC

konsole uzak bir oturumdayken (veya Ctrl-Alt-U) iken "Edit-> ZModem Upload" menüsünden bu yeteneğe sahiptir.

Lütfen dikkat: ilk önce lrzsz paketi kurulmalıdır. Benim için sadece ASCII dosya yüklemek için işe yarıyor gibi görünüyor.

1
jet

Masaüstünden bağlandığınız için ikinci bir terminal açabilirsiniz.

Bu sık sık yaptığım şey:

  • ssh oturumunun çalıştığı ilk uçbirimden, realpath myfile veya readlink -f myfile (eski Ubuntu sürümlerini realpath önceden yüklemez) kullanarak, ihtiyacım olan dosyanın tam yolunu alıyorum ve kopyalayın.
  • i̇kinci terminalden önce, daha önce aldığım tam yolu yapıştırarak dosyayı almak için scp veya sftp kullanın. Örneğin: scp [email protected]:/etc/some/file ./

Oldukça basit, ama hatırlaması da kolay ve çalışması için fazladan bir pakete ihtiyaç duymuyor.

get the full path from first terminal, and then paste in the second terminal

0
gerlos

Şaşırtıcı bir şekilde eski güzel Midnight Commander burada herhangi bir söz görmüyorum. Aklıma göre, muhtemelen Shell için güç yeteneklerine sahip en evrensel ve kullanışlı dosya yöneticisi, durum için de "olması gereken" araçlardan biriydi; ikinci panelde başka herhangi bir (yerel) dosya sisteminizi açabilir ve bu sayede dosyalar ile özgürce çalışabilirsiniz.

Tek ihtiyacınız olan: apt-get install mc (evrenden)

Bundan sonra, mc komutunu çalıştırın, sol veya sağ panel menüsünü açın, Shell bağlantısını seçin, username @ remote-ip, şifrenizi girin - aslında, hepsi bu kadar .. copy (here: download) dosya/klasörleri bir makineden diğerine F5, F6 ile hareket edin ve aşağıdaki düğmelere göre devam edin. Eski MS kullanıcıları için: NC'deki DOS'ta olduğu gibi

0
Nex0