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.
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
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 .
~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).scp -P 22042 foo localhost:
, sunucudaki geçerli dizindeki foo
dosyasını masaüstündeki evinize kopyalayacaktır.~
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.
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:
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.
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
Yerel makinede ~/.grab.sh adlı bir komut dosyası oluşturun.
\#!/bin/bash
[ -n "$3" ] && dir="$3" || dir="."
ssh "$1" ".grabCat.sh $2" > "$dir/$2"
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
.
İ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.
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
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
Aktif SSH bağlantısı üzerinden değil, ancak scp , ssh ile aynı mekanizmaları ve izinleri kullanarak dosyaları kopyalar.
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.
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.
Masaüstünden bağlandığınız için ikinci bir terminal açabilirsiniz.
Bu sık sık yaptığım şey:
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.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.
Ş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