Bir dosyayı yerel X dizininden uzak dizine Y aktarmak için scp kullanın.


99

Buradaki diğer sorulara ve İnternet'teki çeşitli "scp kullanımı" derslerine göz attım, ancak sorunun ne olduğunu çözemiyorum.

Linux Mint kullanıyorum ve scp'nin nasıl çalıştığını anlamaya çalışıyorum.

File.ext (bilgisayarımdaki) dizinindeki / home / name / dir / dizinindeki bir dosyam var

Ssh kullanarak uzaktaki bir makineye bağlanıyorum :

ssh -p 2222 username@domain

bana şifreyi sorar ve kabuk görüntüler:

username@domain ~ $

Şimdi, eğer komutu verirsem (ssh komutunu çalıştırmadan önce yerel dizinde / home / name / dir dizinindeydim ):

scp -r -P 2222 file.ext username@domain 

çıktı:

cp: cannot stat ‘file.ext’: No such file or directory

Aynı sonuç file.ext yerine tam yolu yazarsam

scp -r -P 2222 /home/name/dir/file.ext username@domain 

Ayrıca, sunucu yöneticisi, dosyayı aşağıdaki gibi uzaktaki ana dizine (root yerine) yükleyeceğimi söyledi:

scp -r -P 2222 file.ext username@domain:~/

ama bunu yaptığımda ve "Enter" tuşuna bastığımda hiçbir şey olmuyor, sanki kabuk daha fazla girdi bekliyormuş gibi.

Sorunlarımın özeti:

  • cp: böyle bir dosya veya dizin yok
  • kabuk "üzerinde sıkışmış" ~ /

Baska öneri?


Sorununuzun yalnızca yanlış makinede olmakla ilgili olup olmadığı biraz belirsizdir ... Lütfen çalıştığınız ana makineye her komutun önekini verebilir misiniz? örneğin localuser@machineA: ssh -p 2222 username@domain(ssh komutunu makine A'da yerel kullanıcı olarak çalıştırdığınızı belirtmek için)
Şubat'ta

1
kullanırken scp, uzak taraf her zaman iki nokta üst üste (örneğin remotehost:/tmp) içermelidir , aksi takdirde normal bir kopya çıkar ( yerel bir dosyaya scp /tmp/foo.txt example.comkopyalar )/tmp/foo.txtexample.com
saat

-rtek dosyaları kopyalamak için gerekli olmadığından bayrağı kaldırın ( tekrarlanan dizini kopyalamak için kullanılır )
saat

Sshe oturumunda scp komutunu veriyor musunuz? Yerel makinedeyseniz mantıklı olur.
alexis,

Yanıtlar:


119

scpKomutu uzaktan kumandadan değil yerel makineden çalıştırmanız gerekir . Hiç ihtiyacınız yok ssh:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Ayrıca şunlara da ihtiyacınız yok -r:

 -r      Recursively copy entire directories.  

Uzak makineye zaten giriş yaptıysanız ve yerelden kopyalamak istiyorsanız, yerel makinenize internet üzerinden erişilebildiğinden ve kurulduğundan emin olmanız gerekir ssh. Peşinde olduğun şeyin bu olduğunu sanmıyorum ama öyleyse, şunu uzaktan kumandadan çalıştır:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
Teşekkürler. Sorun ssh oturumunda scp çalıştırmaya çalışıyordum. şimdi çalışıyor!
dragonmnl

28

Uzak ve yerel makine arasında iki yukarı / aşağı yükleme dosyası yöntemi kullanıyorum (Mac air kullanıyorum):

Bu durumda, yerel ve uzak arasında "11.jpeg" yukarı / aşağı gitmek istiyorum:

1.

Hizmetteki dosyaları yerel dizine kopyalayın: Bu komutu yürütmek için ssh'deyken değil, yerel bash terminalinde olmalısınız!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

yerel dizindeki dosyaları uzak servise kopyala: ayrıca yerel bash terminalinde olmalısınız

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. SSH’ye giriş yaparken aynı amacı gerçekleştirmek için önce “Sistem Tercihleri> paylaşım> uzaktan giriş yapma> tüm kullanıcılar” seçeneğini belirlemelisiniz ("tüm kullanıcılar" için ayarlamanız gerekip gerekmediğinden emin değilim, ancak bu durumda çalışır ) "Mac size" Bu bilgisayara uzaktan oturum açmak için şunu yazın: ssh username @ xxxxxx, sonra aşağıdaki komutu yazın:

    scp kullanıcı adı @ etki alanı: /home/xxx/xxx/11.jpeg kullanıcı adı @ xxxxxx: / Kullanıcılar / kullanıcı adı / Masaüstü /

Yukarıdaki komut ssh ile oturum açtığınızda uzaktaki bir yerden dosyayı indirmek içindir, Dosya yüklemek istediğinizde sadece iki yolu değiştirin.


Son olarak, Filezilla muhtemelen günlük işlerinde en uygun bir ~~ olduğunu bulmak
maizer

5

Uzak makinede bu scp komutunu kullanıyorsanız, uzak makinede file.ext"yerel" bir dosya olarak aranıyor .

Yerel birine uzak makinede bulunan bir dosyayı kopyalamak için kullanın scp -P 2222 username@domain:dir/file.ext localdir(varsayarak file.extolduğunu ~/dirda örnekte olduğu gibi, uzak bilgisayarda). scpUzak makinede çalıştırıyorsanız , "yerel" ve "uzak" tuşlarını ters çevirin.


1
OP , yerelden uzaktaki bir yere kopyalamak istiyorsa , OP'nin başlığına bakın.
terdon

Hata! Sanırım haklısın. Ama görünüşe göre geriye doğru yapıyor ...
alexis

3

scpKomutu kullan

Bir klasörü aktarmak istiyorsanız, önce ziponu seçin, unzipsonradan başarabiliriz .

Bilgisayarınızdan şunu çalıştırın:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

İşte, roothesabınız ve 10.145.198.100uzak sunucunun IP adresi. Biz kopyalamak için gidiyoruz the_fileiçin ~/uzaktan klasör.

Sıkıştırılmış dosya:

$ unzip the_zip_file.zip -d destination_folder

rootUzaktaki makineye neden SSH erişimi olsun ki? Bu oldukça güvensiz. Sıradan bir kullanım kullanmak ve daha sonra sudokökün bu makinede yapması gerekenleri yapmak daha iyidir.
Kusalananda

1

Sadece küçük bir katkı, belki de benim gibi yeni başlayanlara yardımcı olabilir: Uzak dizine giden yol şöyle yazılmalıdır: username@domain:~/remote_directory

Burada vurgulamak istediğim, onu her zaman eklememiz gerektiğidir. :~/


0

Dosyaları kopyalamak Linux clientiçin bir çözümLinux Server

  1. sshdAşağıdakileri kullanarak sunucunuzda çalışıp çalışmadığını kontrol edin : ps aux | grep sshd

  2. Değilse yüklemek OpenSSHkullanarak sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Sunucunuzu yeniden başlatın ve telefonun sshdçalıştığını doğrulayın.ps aux | grep sshd

  4. Gerekirse, /etc/ssh/sshd_configdosyanızı yapılandırabilirsiniz , ancak basit yapılandırmalar için gerekli değildir.

  5. bağlantı noktalarının kullanarak açık olduğunu doğrulayın. netcat nc -v -z 127.0.0.1 22

  6. Dosyaları Linuxistemciden istemciye kopyalamak Linuxiçin scp'yi aşağıdaki gibi kullanın. scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Bu dosyanın kopyalandığını doğrulamak için kullanın ssh username@10.22.33.45ve şifrenizi girin.

Dosyaları Linux client`Windows'a kopyalamak için çözüm

  1. MS’den OpenSSH gibi Windows’ta SSH sunucularını çalıştırmak için birden fazla istemci var

    MobaSSH

    Bitvise SSH sunucusu

  2. Yukarıdaki sunuculardan birini kurun ve 22 numaralı bağlantı noktasını kullanarak açık olduğundan emin olun.

    netsh advfirewall güvenlik duvarı add kural adı = "SSH Port 22" dir = eylemde = izin ver protokol = UDP localport = 22

    netsh advfirewall güvenlik duvarı add kural adı = "SSH Port 22" dir = çıkış eylemi = protokole izin ver = UDP localport = 22

    netsh advfirewall güvenlik duvarı add kural adı = "SSH Port 22" dir = eylemde = izin ver protokol = TCP localport = 22

    netsh advfirewall güvenlik duvarı add kural adı = "SSH Port 22" dir = çıkış eylemi = protokole izin ver = TCP localport = 22

    netsh advfirewall, allprofiles durumunu kapatır

  3. Bu sunucuların karşılaştırılması:

    Bitvise SSH sunucusu

    1. Neredeyse yerel cmdistemi, powershellistemi, otomatik tamamlamayı neredeyse sağlar

    2. Gelişmiş kullanıma ihtiyacınız varsa, özelleştirme için ek özellikler sağlar

    3. Basit ihtiyaçlar için kullanıcı özelleştirmesi 0'dır. Almak MobaSSHve çalışmak için çok zaman harcadıktan sonra 2 dakika içinde başladım OpenSSH.

    4. Scp kullanarak dosyaları kopyalamak için: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Kişisel kullanım için ücretsiz, profesyonel kullanım için 99 $. Çok fazla özellik ve mükemmel entegrasyon nedeniyle, fiyat karşılığı değer

    MobaSSH:

    1. Basit Linux gibi komutları pencerelerde bir Linux kabuk sağlar ls, cp, findbenzer vb çalışması,MINGW64

    2. Erişebileceğiniz cmdve powershellyazarak doğrudan cmdveya powershell

    3. Unicode desteği zayıf. Kodlama doğru değil. Örneğin Python, yorumlayıcıyı başlatmaya çalışırsanız , çökecektir. Kodlamayı ( https://stackoverflow.com/a/12834315/4752883 ): kullanarak el ile değiştirmeniz chcp 65001 set PYTHONIOENCONDING=utf-8 ve ardından Python komut istemini başlatmanız gerekir.

    4. MobaSSH hakkında çok şey çok basit kullanıcı arayüzü var olması ve scpve sshve iyi entegre. Yani basit kullanım durumları için çalışacak

    5. Bir dosya kopyalamak için Linuxbir istemci Windowssunucu çalışırken MobaSSH: kullanmak scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Bu çünkü MobaSSHdayanmaktadır cygwinve sürücüler aynı şekilde eşlenir cygwinsürücüler eşlenir -s.

    Https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ adresinden kurulu OpenSSHv6.7 ile Microsoft VM'lerini kullanın , OpenSSHv6.7 zaten kuruludur.

    1. Çok arabası, ve onu çok fazla kişiselleştirmen gerekecek.

    2. Komut tamamlama çalışmıyor

    3. Terminalde imleci hareket ettirirken boşluk bırakacaktır.

    4. Python çalışmıyor

    5. OpenSSH'nin sonraki sürümleri üzerinde daha da gelişmiş olabilir. Daha fazla MS, OpenSSH’yi Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

OSX'de olursanız ...

@ Yerel: / dosya_dizini kullanıcı adıyla çalıştırmayı denediğimde ...

Aşağıdaki hatayı aldım:

ssh: local: node name or service name not known

Çözüm

Mac'imde yerel ayarları yapmak için aşağıdakileri yapmak zorundaydım ssh:

'Sistem Tercihleri' -> 'İnternet ve Ağ' -> 'Paylaşma' -> ENABLE 'Uzaktan Giriş'

Bu daha sonra @ ip adresini kullanıcı adıyla verdi.


-1

Bu aynı problemi bugün MAC'ta yaşadım.

Aşağıdaki komutu yazın:

scp /local-file-path/ /-remote-location-path/
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.