Bir klasörü scp kullanarak uzaktan yerelden nasıl kopyalarım? [kapalı]


2696

Bir klasörü kullanarak uzaktan kumandadan yerel ana bilgisayara nasıl kopyalarım scp?

sshSunucumda oturum açmak için kullanıyorum .
Ardından, uzak klasörü fooyerel olarak kopyalamak istiyorum /home/user/Desktop.

Bunu nasıl başarabilirim?


61
OP'nin sorusu, ssh'd uzak ana bilgisayara dosyayı uzak bilgisayardan yerel ana bilgisayara kopyalamanın mümkün olup olmadığıydı . Neden tek bir cevabın sorusunu neden doğru bir şekilde çözmediğinden emin değilim.
JeffDror

3
Sorunun dayanağı yanlış. Fikir, ssh oturum açtıktan sonra, oturum açmış makineden oturum açmış olan istemciye dosyaları nasıl taşıyacağınızdır. Ancak, scp ssh bağlantısını bilmiyor veya kullanamıyor. Kendi bağlantılarını yapıyor. Bu nedenle basit çözüm, yerel iş istasyonunda yeni bir terminal penceresi oluşturmak ve uzak sunucudan yerel makineye dosya aktaran scp'yi çalıştırmaktır. Örneğin, scp -i anahtar kullanıcı @ remote: / remote-dir / remote-file / local-dir / local-file
jeffmcneill

12
Soru konu dışı olabilir, ancak aynı zamanda Google'da en yüksek sırada yer alan gönderidir. Kilitleme, daha iyi bir çözüm sağlamak için hiç kimsenin güncelleyemeyeceği anlamına gelir.
Alex Harvey

3
Geçenlerde SuperUser üzerinde başka bir araç için komut satırları ile ilgili benzer bir "biraz daha derin" sorusunu sordum ve o mods tarafından StackOverflow taşındı. Her neyse modların çekişmesine katılıyorum: Bunu SuperUser'a taşıyabilir miyiz, lütfen kilidini açıp daha fazla cevap gelmesini sağlayabilir miyiz?
Nikhil VJ

3
Genel olarak, yığın akışı üzerindeki "konu dışı" reaksiyon, platforma en büyük kusurdur. Aşırı hevesli martinler.
AdamC

Yanıtlar:


4938
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Foo'nun sonuna '/' karakterini dahil etmeyerek, sadece dizinin içeriğini değil, dizinin kendisini de (içindekiler dahil) taşıyacaksınız.

Gönderen man scp( Çevrimiçi kılavuza bakın )

-r Tüm dizinleri özyinelemeli olarak kopyala


1409
Ben her zaman bu google. İlgili çizgi roman: xkcd.com/1168
cptloop

10
Bulduğum iki güzel şey: -Cbayrak sıkıştırma ekliyor ve -cbayrak scp -c blowfish a@b:something . , dimuthu'nun cevabında görüldüğü
Automatico

79
dosya değiştirme sürelerini, izinleri, vb korumak için -p kullanın! scp -pr kullanıcı @ ...
Ber

27
Bu cevap önemli bir açıklamadan yoksundur. Eğer scp ile bitecek Desktop/fooveya olacak Desktop/allcontentsofFooGoherescp bazen bana garip davranıyor gibi görünüyor bir şey daha sonra başka bir şey
Toskan

7
@Toskan scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/seninle bitmeli Desktop/foo. İle scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/ size içeriğiyle ile sona erecek fooiçinde Desktopve tüm alt dirs fooaltında mayınlarıDesktop
Ioannis

307

SCP'nin tam gücünü kullanmak için aşağıdaki adımlardan geçmeniz gerekir:

  1. Ortak anahtar yetkilendirme
  2. Ssh takma adları oluşturma

Ardından, örneğin bu ~ / .ssh / config dosyasına sahipseniz :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

kendinizi şifre girişinden koruyacak ve scp sözdizimini basitleştireceksiniz :

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Dahası, uzaktan yol tamamlamayı kullanabilirsiniz:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Güncelleme:

Uzaktan bash tamamlama etkinleştirerek için, hem bash kabuğu olması gerekir <source>ve <target>ana ve düzgün çalışıyor bash tamamlama. Daha fazla bilgi için ilgili sorulara bakın:

Scp kullanırken uzak yollar için otomatik tamamlama nasıl etkinleştirilir?
SCP dosya adı sekmesinin tamamlanması


12
Yapılandırma dosyasını bilmiyordum, bu harika!
Mart'ta dmastylo

Sekme tamamlama saçma, sadece yerel ana bilgisayardan benim için tamamlar.
Bernhard

14
@ b.long Soru "Uzak klasör foo'yu yerel masaüstüne nasıl kopyalanır". Cevabım "scp -r prod: / path / foo / home / user / Desktop" . Umarım ilişkileri görebilirsin.
Alexander Yancharuk

2
@Bernhard Benim için belliydi çünkü bash-shell kullanıyorum. Beni buna yönlendirdiğiniz için teşekkürler! Yanıt güncellendi.
Alexander Yancharuk

1
@Alexander Yancharuk: Cevabınız için teşekkürler, bu sadece sözdizimini kapsamaktan daha detaylıdır.
Gladyatör

217

Tümünü Yerel Konumdan Uzak Konum'a kopyalamak için (Yükle)

scp -r /path/from/destination username@hostname:/path/to/destination

Tümünü Uzak Konum'dan Yerel Konum'a kopyalamak için (İndir)

scp -r username@hostname:/path/from/destination /path/to/destination

Özel Liman nerede xxxxolduğunu özel liman sayısı

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Geçerli dizinde Uzaktan Yerel'e kopyala

scp -r username@hostname:/path/from/file .

Yardım:

  1. -r Tüm dizinleri ve dosyaları özyinelemeli olarak kopyala
  2. Her zaman için tam konumu kullan /,pwd
  3. scp mevcut tüm dosyaların yerini alacak
  4. hostname ana bilgisayar adı veya IP adresi olacak
  5. özel bağlantı noktası gerekiyorsa (bağlantı noktası 22 dışında) kullanın -P portnumber
  6. . (dot) - geçerli çalışma dizini anlamına gelir, Yani sunucudan indir / kopyala ve sadece buraya yapıştır.

Not: Bazen, güvenlik duvarında bağlantı noktasına izin verilmemesi nedeniyle özel bağlantı noktası çalışmaz, bu nedenle gelen ve giden bağlantı için güvenlik duvarında özel bağlantı noktasına izin verildiğinden emin olun


1
Görünüşe göre (en azından Raspbian Jessie ve Ubuntu'nun son sürümlerinde) scp port için -P (büyük harf P) kullanırken (garip) ssh -p (küçük harf) kullanıyor.
Adam Plocher

-p "orijinal dosyadaki değişiklik zamanlarını, erişim zamanlarını ve modları" korumak için ayrılmıştır. Bu yüzden port için kullanıyorsanız, muhtemelen çalışmıyor ;-) Küçük p'yi farklı kullanan farklı bir sürümünüz yoksa.
Adam Plocher

Ssh ile evet. Scp ile değil (sanırım).
Adam Plocher

Dizin bir boşluk içeriyorsa ne koymalıyım?
Brethlosze

@hyprfrcb pwdKonumu almak ve aynı şekilde kullanmak için kullanın
Shiv Singh

48

Her zaman kullandığım:

scp -r username@IP:/path/to/server/source/folder/  .

. (nokta) : anlamına gelir current folder. bu yüzden sunucudan kopyalayın ve yalnızca buraya yapıştırın.

IP : gibi bir IP adresi olabilir 125.55.41.311veya ana bilgisayar gibi olabilir ns1.mysite.com.


9
.Geçerli dizine atıfta bulunduğunuzu belirttiğiniz için teşekkür ederiz !
ericmjl

35

Kataloğu uzak sunucuda sıkıştırmak daha iyidir:

tar czfP backup.tar.gz /path/to/catalog

İkincisi, uzaktan kumandadan indirin:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Sonunda dosyaları çıkarın:

tar -xzvf backup.tar.gz

10
"Daha iyi", aktardığınız verilere ve sıkıştırmak / sıkıştırmak için sunucuya ssh göndermektir. Ve: scp'ye -Cbayrak gibi sıkıştırma ekleyebilirsiniz scp -C a@b:bigfile ..
Automatico

4
Bu bana @cptloop tarafından yapılan yorumu hatırlatıyor! : D xkcd.com/1168
GoodSp33d

22

Ve uzak konumdan indirmek için bir dosya cehenneminiz varsa ve güvenliği önemsemiyorsanız, scp varsayılan şifrelemesini (Triple-DES) 'balon balığı' gibi bir şeye değiştirmeyi deneyin.

Bu, dosya kopyalama süresini önemli ölçüde azaltır.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

2
Bu blog gönderisine göre arcfour, yerine daha iyi performans elde edersiniz blowfish, ancak güvenlik kusurları vardır.
Automatico

20

Tipik senaryo,

scp -r -P port username@ip:/path-to-folder  .

bir örnekle açıkladı,

scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .

nerede,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory

Cevabınız için teşekkürler. - Belirli bir SSH portu için P benim için yardımcı oldu.
redoff

19

Birlik araç çubuğunuzdaki Dosyalar'a gidin

resim açıklamasını buraya girin

Ctrl + l tuşlarına basın ve buraya yazın_goes_alan_adiniz

192.168.1.103, bağlanmak istediğiniz ana makinedir.

Burada bir örnek

resim açıklamasını buraya girin


12

Soru, bir klasörü scpkomutla uzaktan yerelden lokal olarak nasıl kopyalayacağımızdı .

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Ancak burada bunu yapmanın en iyi yolu sftp- SSH Dosya Aktarım Protokolü (ayrıca Güvenli Dosya Aktarım Protokolü veya SFTP), herhangi bir güvenilir veri akışı üzerinden dosya erişimi, dosya aktarımı ve dosya yönetimi sağlayan bir ağ protokolüdür. (Wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Hakkında yardım için sftpkomutu sadece yazın helpveya ?.


12

Eğer girmek "Çok fazla kimlik doğrulama hataları" , kendi Severs SSH sunucusuna eklediğiniz tam SSH anahtarı belirtin:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir

5

Neden bilmiyorum ama kaynak sunucu yönergesi önce yerel klasör kullanmak zorunda kaldı. çalışmasını sağlamak

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/

1
Kullanıcının izinleri olduğu varsayılarak, kullanmadan mutlak bir yol yapabilir misinizroot@
Jonathan
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.