scp dengan nomor port yang ditentukan

794

Saya mencoba scp file dari server jauh ke mesin lokal saya. Hanya port 80 yang dapat diakses.

Saya mencoba:

scp -p 80 [email protected]:/root/file.txt .

tapi ada kesalahan ini: cp: 80: No such file or directory

Bagaimana cara menentukan nomor port dalam perintah scp?

Satu dua tiga
sumber
33
port harus dalam modal -P 80
Eliethesaiyan

Jawaban:

1407

Tidak seperti ssh, scp menggunakan saklar P huruf besar untuk mengatur port alih-alih huruf kecil p:

scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default

Saklar p huruf kecil digunakan dengan scp untuk menjaga waktu dan mode.

Berikut adalah kutipan dari halaman manual scp dengan semua detail mengenai kedua sakelar, serta penjelasan mengapa huruf besar P dipilih untuk scp:

-P port Menentukan port yang akan dihubungkan pada host jarak jauh. Perhatikan bahwa opsi ini ditulis dengan huruf 'P', karena -p sudah disediakan untuk menjaga waktu dan mode file dalam rcp (1).

-p Mempertahankan waktu modifikasi, waktu akses, dan mode dari file asli.

Perbarui dan kesampingkan untuk mengatasi salah satu komentar (sangat tervotasikan) :

Berkenaan dengan komentar Abdull tentang scpurutan opsi, apa yang ia sarankan:

scp -P80 -r some_directory -P 80 ...

..., menyelingi opsi dan parameter. getopt(1)jelas mendefinisikan bahwa parameter harus datang setelah opsi dan tidak diselingi dengan mereka:

Parameter getopt disebut dengan dapat dibagi menjadi dua bagian: opsi yang memodifikasi cara getopt akan melakukan parsing (opsi dan optstring dalam SYNOPSIS), dan parameter yang harus diurai (parameter dalam SYNOPSIS). Bagian kedua akan dimulai pada parameter non-opsi pertama yang bukan argumen opsi, atau setelah kemunculan pertama '-'. Jika tidak ada opsi '-o' atau '--options' ditemukan di bagian pertama, parameter pertama dari bagian kedua digunakan sebagai string opsi pendek.

Karena -ropsi baris perintah tidak memerlukan argumen lebih lanjut, some_directoryadalah "parameter non-opsi pertama yang bukan argumen opsi." Oleh karena itu, sebagaimana dijabarkan dengan jelas di getopt(1)halaman manual, semua argumen baris perintah berikutnya yang mengikutinya (yaitu, -P 80 ...) diasumsikan sebagai non-opsi (dan argumen non-opsi).

Jadi, pada dasarnya, ini adalah bagaimana getopt(1)melihat contoh yang disajikan dengan akhir opsi dan awal parameter yang dibatasi oleh teks berhasil bing dalam warna abu-abu:

scp -P80 -r some_directory -P 80 ...

Ini tidak ada hubungannya dengan scpperilaku dan segala sesuatu yang berkaitan dengan bagaimana aplikasi standar POSIX mengurai opsi baris perintah menggunakan getopt(3)set fungsi C.

Untuk detail lebih lanjut berkenaan dengan pemesanan dan pemrosesan baris perintah, silakan baca getopt(1)manual menggunakan:

man 1 getopt
Michael Goldshteyn
sumber
88
btw, scpmenuntut urutan opsi yang benar: scp -r some_directory -P 80 ...tidak berfungsi ----- tetapi scp -P 80 -r some_directory ...berfungsi.
Abdull
9
umumnya di linux perintah diikuti oleh opsi dan kemudian instruksi / nilai
Gary
2
@Abdull perhatikan bahwa direktori scp -r -p 50193 / path / to / juga berfungsi. Parameter path file tidak terikat ke opsi rekursi -r.
Benjamin
6
@Benjamin Kecuali Anda bermaksud menggunakan port 50193 dalam hal ini 'p' Anda harus ditulis dalam huruf kapital.
Tidak ada
1
@Abdull: ada jawaban di askubuntu.com/a/307078/37574 yang menjelaskan -Ppemesanan parameter. Pada dasarnya, port harus pergi sebelum tuan rumah. Ini keduanya mencegah ambiguitas dan memungkinkan dua -Pparameter jika kedua host jauh.
mwfearnley
70

Satu petunjuk tambahan. Tempatkan opsi '-P' setelah perintah scp, tidak peduli apakah mesin yang Anda ssh-ing adalah yang kedua (alias tujuan). Contoh:

scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder
Gooshan
sumber
46

Anda tahu apa yang lebih keren dari itu -P? tidak ada

Jika Anda menggunakan server ini lebih dari beberapa kali, atur / buat ~/.ssh/configfile dengan entri seperti:

Host www.myserver.com
    Port 80

atau

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username

Maka Anda dapat menggunakan:

scp [email protected]:/root/file.txt .

atau

scp short:/root/file.txt .

Anda dapat menggunakan apa saja di baris "Host" dengan ssh, scp, rsync, git & lebih

Ada opsi konfigurasi BANYAK yang dapat Anda gunakan dalam file konfigurasi, lihat:

man ssh_config

Mike
sumber
3
Hanya solusi yang memungkinkan penggunaan scp -3dari dan ke server dengan pendengar ssh pada port yang berbeda. scp -3 -P 123 server1:/file -P 456 server2:/fileatau alternatif serupa tidak akan berfungsi, scp mengasumsikan port yang sama di kedua server
user88595
28

Saya menggunakan port yang berbeda maka standar dan salin file antara file seperti ini:

scp -P 1234 user@[ip address or host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine

Ini hanya untuk penggunaan sesekali, jika itu mengulangi sendiri berdasarkan jadwal Anda harus menggunakan pekerjaan rsync dan cron untuk melakukannya.

Marian Zburlea
sumber
7

untuk menggunakan port lain pada perintah scp gunakan huruf P seperti ini

scp -P port-number source-file/directory user@domain:/destination

ya ali

Hasan Barary
sumber
6

scp help memberitahu kita bahwa port ditentukan oleh huruf kapital P.

~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

Semoga ini membantu.

DD
sumber
2

Menyalin file ke host: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Menyalin file dari host: scp user@host:/directory/SourceFile TargetFile

Menyalin direktori secara rekursif dari host: scp -r user@host:/directory/SourceFolder TargetFolder

CATATAN : Jika host menggunakan port selain port 22, Anda dapat menentukannya dengan opsi -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

AJ.
sumber
6
Hanya CATATAN akan cukup
blagus
2

Ini dapat dicapai dengan menentukan port melalui -Psakelar:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
Vaseem007
sumber
2

jika Anda perlu menyalin file lokal ke server (tentukan port)

scp -P 3838 /the/source/file [email protected]:/destination/file
Turan Zamanlı
sumber
0

Semoga ini akan membantu seseorang mencari jawaban yang sempurna

Menyalin folder atau file dari server dengan port yang ditentukan ke server lain atau mesin lokal

  1. Pergi ke direktori di mana Anda memiliki hak admin lebih disukai direktori home Anda pada mesin di mana Anda ingin menyalin file
  2. Tulis perintah di bawah ini

scp -r -P pengguna port @ IP_address: / home / file / pathDirectory.

**Note:** The last . on the command directs it to copy everything in that folder to your directory of preference
Kiryamwibo Yenusu
sumber
0

Ada banyak jawaban, tetapi Anda harus tetap sederhana. Pastikan Anda tahu port apa yang didengarkan SSH, dan tentukan. Inilah yang baru saja saya gunakan untuk mereplikasi masalah Anda.

scp-P 12222 file.7z [email protected]: / home / user / Downloads Itu bekerja dengan baik.

HarteScout 1
sumber