~/Downloads
Kişisel bilgisayarımdaki alt dizinime indirilen bir dizi yazılım dosyası var . Ben de kullanarak bir bilgisayara uzaktan bağlanmak için bash kullanıyorum ssh
.
Bu dosyayı ssh
uzak bilgisayara aktarmak mümkün mü ?
~/Downloads
Kişisel bilgisayarımdaki alt dizinime indirilen bir dizi yazılım dosyası var . Ben de kullanarak bir bilgisayara uzaktan bağlanmak için bash kullanıyorum ssh
.
Bu dosyayı ssh
uzak bilgisayara aktarmak mümkün mü ?
Yanıtlar:
scp
Bu amaçla kullanmak isteyebilirsiniz . SSH protokolünü kullanarak dosyaları aktarmak için güvenli bir araçtır.
Örneğin, adlı bir dosya kopyalamak için yourfile.txt
gelen ~/Downloads
uzak bilgisayar, kullanımı:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Burada daha fazla örnek görebilirsiniz .
rsync
de işe yarayabilir, şimdi düşünüyorum
scp
yukarıdaki ile değiştirin rsync
ve gayet iyi çalışmalıdır.
rsync
şey için, hatta tek dosyalar için kullanmaya eğilimliyim , çünkü basit durumlarda "sadece çalışır" ve diğer durumlarda çok daha verimli olabilir. Ya kullanılıyorsa scp
veya rsync
herhangi bir şey değil zaten sıkıştırılmış ve / veya şifrelenmiş üzerine, (üzerinde sıkıştırma seçeneği açmayı unutmayın -C
için scp
, -z
ya --compress
için rsync
). Aslında alışkanlık ile açıyorum - işleri yavaşlattığı bir durum bulmanız çok nadirdir (belki de rPi gibi sınırlı CPI gücüne sahip yavaş düşük güçlü bir cihaz kullanıyorsanız).
Bunun scp
için doğru araç açıkça olsa da, herhangi bir nedenle kullanamıyorsanız, yerel makinenizden, örneğin bir dizin yapısını uzak makineye kopyalamak için aşağıdakine benzer bir şey yapabilirsiniz:
tar -c . | ssh <remote> tar -x
Bu işlem tar
o anki yerel makinede dizin ve yazma tar
için stdout
hangi sonra taşınıyor olacak ssh
o okur tar dosyasını açmak uzak komutu yerine getirecektir komutustdin
Dietrich Epp'in -f -
hem oluşturma hem de çıkarma uçlarında varsayılan olma hakkındaki yorumunu yansıtacak şekilde düzenlendi , bu yüzden açıkça belirtmek gerekmiyor.
-C basedir
için bir argüman eklemek isteyeceksiniz tar
.
Bunu nadir durumlarda yapmak istiyorsanız sshfs
, FUSE'yi (Linux, * BSD, Mac OS X) destekleyen bir Unix benzeri kullanıyorsanız uzak dosya sistemini monte etmenizi öneririm . Ana dizininizin altında ~ / remote-server olarak adlandırılan bir dizin oluşturun:
$ mkdir ~/remote-server
Ardından uzak dosya sistemini ile bağlayın sshfs
. "Yourserver.com" yerine uzak makinenizin ana bilgisayar adını ve "uzak dizinin adını" uzaktaki sistemde kullandığınız dizinle değiştirin.
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
Bu yapıldıktan sonra, uzak dizin dosya sisteminizin bir parçasıdır ve üzerinde bulunan tüm normal araçlarınızı kullanabilirsiniz cp
:
$ cp ~/Downloads/your-files ~/remote-server
Henüz sshfs
yüklemediyseniz, paket yöneticinizi kullanarak bilgisayarınıza yükleyebilmeniz gerekir ( sshfs
veya adlı paketleri arayın fuse-sshfs
). Daha fazla bilgi için çevrimiçi bir öğretici okuyabilirsiniz .
Bu arada, uzak sunuculardaki dosyaları yönetmenin en sevdiğim yolu. Normalde bir üretim sunucusunu ve iki geliştirme sunucusunu bu şekilde bağlı tutarım ve normal dosya tarama iş akışımı onlarla birlikte kullanırım.
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
ve -C
kötü bant genişliği ise sıkıştırma için. İyi çalışır çalışmazsa, uzaktaki dosya sistemlerini ssh üzerine hızlı bir şekilde monte etmek için komutlara şahsen takma adlar ekliyorum. @Benjamin_Staton Burada sudo veya root kullanmam, en azından uygun bir kullanıcı / grup eşlemesi olmadan.
İlk kez, scp
(kopyala ssh
) ve arasında gerçek bir fark yoktur rsync
.
Sonraki çalıştırmalar, rsync'in zaten varolan dosyaları kopyalamamasından yararlanır.
rsync -avH ~/Downloads username@remotehost:Downloads
-a
tüm dosyalar için-v
ayrıntılı için-H
"sadece sembolik bağlantıları bul ve doğru olanı yap"Diğer yararlı bayraklar şunları içerir:
--delete
hedefte artık kaynakta bulunmayan dosyaları silmek için.--dry-run
test için - ile birleştirildiğinde çok kullanışlı --delete
.Bu, ssh
ayarladıysanız, şifreleri olmayan bir giriş yapmak için de tuşları kullanır .
Koşunun sonunda rsync
, düz kopyayı tekrar tekrar yapmanın kaç kat daha hızlı olduğunu söyleyeceğiz.
-H
aslında sabit bağlantılar içindir, kaynak dizin yapısında birden fazla yere bağlandığında aynı içeriğin iki veya daha fazla gönderilmesini durdurur (ancak işlemi büyük dizin yapıları için daha az verimli hale getirebilir). sembolik bağlantılar üzerinde hiçbir etkisi yoktur, ancak -a
/ --archive
do tarafından dahil edilen seçeneklerin bazıları semboliklerin işlenme biçimini etkiler.
Yukarıdaki cevaplara eklemek için. Bazen uzak yoldan tam olarak emin değilim. Bu durumlarda sftp
, önce gerekli konuma gitmek için kullanın, ardından bir dosyayı gerçekten indirmek veya yüklemek için get veya put komutunu kullanın.
Ayrıca, her zaman senkronize edilmiş bir şey tutmak ve hatta uzak makinede bulunan bazı dosyaları yerel olarak yürütmek istiyorsanız, sshfs
harika çalışıyor.
SSH ile çok benzer bir şey yapıyorum. Visual Studio için özel bir oluşturma aracı oluşturdum ve temelde VS kodumu hedef bilgisayara kopyalayan ve daha sonra bu hedef bilgisayarda derleyen bir ssh komutunu çalıştırıyorum.
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand'
Tek tırnak işareti ve noktalı virgül kullanıldığına dikkat edin. Birincisi komutlarınızı ssh aracılığıyla hostB'ye ekler ve ikincisi hostA'dan bir ssh komutunda birden fazla hostB sistem komutunu çalıştırmanıza izin verir.
Bu işi yapmak için, başlangıç makinenizde ssh anahtarları ayarlamanız gerekir, böylece userA @ hostA olabilir ve hostB'ye userB olarak giriş yapabilirsiniz. UserA @ hostA için genel bir ssh anahtarı oluşturma işlemi iyi belgelenmiştir. UserA için hostA üzerinde ortak bir anahtar oluşturmaz ve bu anahtarı hostB'ye userB olarak kopyalarsanız, her seferinde şifrenizi girmeye zorlanırsınız - bu da otomasyonun sevincini bozar.
this file
) ve birden çok dosyaya ( ) atıfta bulunura series of software files
, en iyi çözüm tek bir dosyanız mı yoksa birden çok dosyanız mı olduğuna bağlıdır.