Gunakan scp untuk mentransfer file dari direktori lokal X ke direktori jarak jauh Y

99

Saya melihat-lihat pertanyaan lain di sini dan di berbagai tutorial "penggunaan scp" di Internet, tapi saya tidak bisa memilah apa yang salah.

Saya menggunakan Linux Mint dan saya mencoba mencari tahu cara kerja scp .

Saya memiliki file file.ext (di komputer saya) di direktori / home / name / dir /

Saya terhubung ke mesin jarak jauh menggunakan ssh , seperti:

ssh -p 2222 username@domain

ia menanyakan kata sandi dan shell menampilkan:

username@domain ~ $

sekarang, Jika saya mengeluarkan perintah (sebelum saya menjalankan ssh saya berada di direktori lokal / home / name / dir ):

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

output adalah:

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

Hasil yang sama jika alih-alih file.ext saya menulis path lengkap

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

Juga, admin server mengatakan kepada saya bahwa saya akan mengunggah file ke direktori home jarak jauh saya (bukan root), seperti:

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

tetapi ketika saya melakukannya dan tekan "Enter" tidak ada yang terjadi, seolah-olah shell sedang menunggu input lebih lanjut.

Ringkasan masalah saya:

  • cp: tidak ada file atau direktori seperti itu
  • shell "macet" pada ~ /

Ada saran?

dragonmnl
sumber
itu sedikit tidak jelas apakah masalah Anda hanya terkait dengan berada di mesin yang salah ... bisakah Anda awali setiap perintah dengan host yang Anda jalankan? misalnya localuser@machineA: ssh -p 2222 username@domain(untuk menunjukkan bahwa Anda menjalankan perintah ssh sebagai pengguna lokal di machineA)
umläute
1
saat menggunakan scp, sisi jarak jauh selalu harus mengandung titik dua (mis. remotehost:/tmp), selain itu ia hanya akan melakukan salinan biasa ( scp /tmp/foo.txt example.comakan menyalin /tmp/foo.txtke file lokal example.com)
umläute
hapus -rbendera, karena ini tidak diperlukan untuk menyalin file tunggal (ini digunakan untuk menyalin direktori secara rekursif )
umläute
Apakah Anda mengeluarkan perintah scp di dalam sesi sshe ? Masuk akal jika Anda menggunakan mesin lokal.
alexis

Jawaban:

119

Anda perlu menjalankan scpperintah dari mesin lokal, bukan pada remote. Anda tidak perlu sshsama sekali:

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

Anda juga tidak perlu -r:

 -r      Recursively copy entire directories.  

Jika Anda sudah masuk ke mesin jarak jauh dan ingin menyalin dari lokal Anda, Anda perlu memastikan bahwa mesin lokal Anda dapat diakses melalui internet dan telah sshdiatur. Saya tidak berpikir ini adalah apa yang Anda cari tetapi jika ya, jalankan ini dari remote:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/
terdon
sumber
1
Terima kasih. masalahnya adalah saya mencoba menjalankan scp di dalam sesi ssh. sekarang berhasil!
dragonmnl
28

Saya menyediakan dua metode memuat / menaikkan file antara mesin jarak jauh dan lokal (saya menggunakan Mac air):

Dalam hal ini, saya ingin menaikkan / menurunkan "11.jpeg" antara lokal dan jarak jauh:

1.

Salin file pada layanan ke dir lokal: Anda harus berada di terminal bash lokal untuk melakukan perintah ini, bukan ketika Anda berada di ssh!

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

salin file dalam dir lokal ke layanan jarak jauh: Anda juga harus berada di terminal bash lokal

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Untuk mencapai maksud yang sama ketika Anda masuk ke SSH , Anda harus terlebih dahulu mengatur "System Preferences> sharing> remote log in> semua pengguna (saya tidak yakin apakah Anda harus mengatur untuk" semua pengguna ", tetapi itu berfungsi dalam situasi ini ) "Mac akan memberi tahu Anda" Untuk masuk ke komputer ini dari jarak jauh, ketik: ssh username @ xxxxxx, lalu ketikkan perintah di bawah ini:

    scp username @ domain: /home/xxx/xxx/11.jpeg username @ xxxxxx: / Pengguna / nama pengguna / Desktop /

Perintah di atas adalah untuk mengunduh file dari jarak jauh ke lokal saat Anda masuk ke ssh, Cukup ubah dua jalur ketika Anda ingin mengunggah file.

maizer
sumber
Akhirnya, saya menemukan Filezilla mungkin yang paling nyaman dalam pekerjaan sehari-hari ~~
maizer
5

Jika Anda menjalankan perintah scp ini pada mesin jarak jauh, itu mencari file.extsebagai file "lokal", yaitu pada mesin jarak jauh.

Untuk menyalin file dari mesin jarak jauh ke mesin lokal, gunakan scp -P 2222 username@domain:dir/file.ext localdir(dengan anggapan file.extada di ~/dirdalam komputer remote, seperti dalam contoh Anda). Jika Anda menjalankan scpmesin jarak jauh, balikkan "lokal" dan "jauh".

alexis
sumber
1
OP ingin menyalin dari lokal ke jarak jauh, lihat judul OP.
terdon
Ups, saya kira Anda benar. Tapi dia tampaknya melakukannya mundur ...
alexis
3

Gunakan scpperintah

Jika Anda ingin mentransfer folder, cukup zipdulu, kami bisa unzipmelakukannya nanti.

Dari komputer Anda, jalankan ini:

$ scp your_path_to_the_file/the_file [email protected]:~/

Di sini, rootadalah akun Anda, dan 10.145.198.100merupakan alamat IP server jarak jauh. Kami akan menyalin the_fileke ~/folder di remote.

Unzip file:

$ unzip the_zip_file.zip -d destination_folder
Catbuilt
sumber
Mengapa rootbahkan memiliki akses SSH pada mesin jarak jauh? Itu cukup tidak aman. Lebih baik menggunakan penggunaan biasa dan kemudian sudomelakukan apa pun yang dilakukan root pada mesin itu.
Kusalananda
1

Hanya sedikit kontribusi, mungkin ini dapat membantu pemula seperti saya: jalur ke direktori jarak jauh harus ditulis seperti ini: username@domain:~/remote_directory

Yang ingin saya soroti di sini adalah kita harus selalu menambahkannya :~/

Billal Begueradj
sumber
0

Solusi untuk menyalin file dari Linux clientkeLinux Server

  1. Periksa apakah sshdberjalan di server Anda menggunakan: ps aux | grep sshd

  2. Jika tidak menginstal OpenSSHmenggunakan sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Mulai ulang server Anda dan verifikasi bahwa sshdsudah berjalan menggunakan ps aux | grep sshd

  4. Jika perlu, Anda dapat mengonfigurasi /etc/ssh/sshd_configfile Anda , tetapi tidak perlu untuk konfigurasi sederhana

  5. verifikasi bahwa port terbuka menggunakan netcat nc -v -z 127.0.0.1 22

  6. Untuk menyalin file dari Linuxklien ke Linuxklien gunakan scp sebagai berikut scp ~/filename.md [email protected]:~/folder/filename.md

  7. Untuk memverifikasi bahwa file telah disalin gunakan ssh [email protected]dan berikan kata sandi Anda.

Solusi untuk menyalin file dari Linux clientke `Windows

  1. Ada beberapa klien untuk menjalankan server SSH pada Windows seperti OpenSSH dari MS

    MobaSSH

    Menggigit server SSH

  2. Instal salah satu server di atas dan pastikan port 22 terbuka menggunakan

    firewall netsh advfirewall tambahkan aturan nama = "SSH Port 22" dir = dalam aksi = izinkan protokol = UDP localport = 22

    firewall netsh advfirewall tambahkan aturan nama = "SSH Port 22" dir = aksi keluar = izinkan protokol = UDP localport = 22

    firewall netsh advfirewall tambahkan aturan nama = "SSH Port 22" dir = dalam aksi = izinkan protokol = TCP localport = 22

    firewall netsh advfirewall tambahkan aturan nama = "SSH Port 22" dir = tindakan keluar = izinkan protokol = TCP localport = 22

    advfirewall netsh menonaktifkan semua status profil

  3. Perbandingan dari server-server ini:

    Menggigit server SSH

    1. Menyediakan hampir dekat ke pelengkap asli cmd, powershellcepat, pelengkapan otomatis

    2. Memberikan kemampuan tambahan untuk penyesuaian, jika Anda membutuhkan penggunaan tingkat lanjut

    3. Kustomisasi pengguna untuk kebutuhan sederhana adalah 0. Saya mulai menggunakannya dalam 2 menit, setelah menghabiskan banyak waktu untuk mencoba MobaSSHdan OpenSSHbekerja.

    4. Untuk menyalin file menggunakan scp use: scp ~/filename.md [email protected]:/C/Users/username/filename.md

    5. Gratis untuk penggunaan pribadi, $ 99 untuk penggunaan profesional. Karena begitu banyak fitur dan integrasi yang hebat, harganya sepadan dengan uang yang dikeluarkan

    MobaSSH:

    1. menyediakan shell linux pada windows di mana perintah linux sederhana seperti ls, cp, finddll kerja, mirip denganMINGW64

    2. Anda dapat mengakses cmddan powershelllangsung dengan mengetik cmdatau powershell

    3. Dukungan Unicode buruk. Pengkodean salah. Misalnya, jika Anda mencoba memulai Pythonpenerjemah, itu akan macet. Anda perlu mengubah penyandian secara manual menggunakan ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 dan kemudian mulai Python prompt

    4. Hal yang hebat tentang MobaSSH adalah ia memiliki antarmuka pengguna yang sangat sederhana, scpdan sshdan terintegrasi dengan baik. Jadi akan bekerja untuk kasus penggunaan sederhana

    5. Untuk menyalin file dari Linuxklien ke Windowsserver yang berjalan MobaSSH: gunakan scp ~/filename.md [email protected]:/cygdrive/c/Users/username/filename.md ini karena MobaSSHdidasarkan pada cygwindan drive-nya dipetakan dengan cara yang sama cygwin-s drive dipetakan.

    Gunakan VMs dari Microsoft dengan OpenSSHv6.7 yang diinstal dari https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 sudah diinstal.

    1. Sangat buggy, dan Anda harus menyesuaikannya dengan berat.

    2. Perintah selesai tidak berfungsi

    3. Ini akan meninggalkan ruang kosong ketika Anda memindahkan kursor di terminal

    4. Python tidak berfungsi

    5. Versi OpenSSH yang lebih baru, mungkin telah diperbaiki. MS lebih lanjut tampaknya membuat OpenSSH tersedia melalui Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

alpha_989
sumber
-1

Jika Anda menggunakan OSX ...

Ketika saya mencoba menjalankannya dengan nama pengguna @ lokal: / file_directory ...

Saya mendapat kesalahan berikut:

ssh: local: node name or service name not known

Larutan

Di Mac saya, saya harus melakukan yang berikut untuk mengatur lokal ssh:

'Preferensi Sistem' -> 'Internet & Jaringan' -> 'Berbagi' -> AKTIFKAN 'Login Jauh'

Ini kemudian memberikan alamat nama pengguna @ ip.

Tim Maguire
sumber
-1

Saya punya masalah yang sama hari ini di MAC.

Ketikkan perintah berikut:

scp /local-file-path/ /-remote-location-path/
heiwa
sumber