scp ที่มีหมายเลขพอร์ตที่ระบุ


793

ฉันพยายามที่จะสแกนไฟล์จากเซิร์ฟเวอร์ระยะไกลไปยังเครื่องท้องถิ่นของฉัน เข้าถึงได้เฉพาะพอร์ต 80

ฉันเหนื่อย:

scp -p 80 username@www.myserver.com:/root/file.txt .

แต่ได้รับข้อผิดพลาดนี้: cp: 80: No such file or directory

ฉันจะระบุหมายเลขพอร์ตในคำสั่ง scp ได้อย่างไร


33
พอร์ตควรอยู่ในเมืองหลวง -P 80
Eliethesaiyan

คำตอบ:


1406

ซึ่งแตกต่างจาก ssh scp ใช้สวิตช์ตัวพิมพ์ใหญ่เพื่อตั้งค่าพอร์ตแทนตัวพิมพ์เล็ก p:

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

สวิตช์ p ตัวพิมพ์เล็กใช้กับ scp เพื่อเก็บรักษาเวลาและโหมด

นี่คือข้อความที่ตัดตอนมาจากหน้า man ของ scp พร้อมรายละเอียดทั้งหมดเกี่ยวกับสวิตช์สองตัวรวมทั้งคำอธิบายว่าทำไมตัวเลือก P ตัวพิมพ์ใหญ่จึงเลือกใช้สำหรับ scp:

-P พอร์ตระบุพอร์ตที่จะเชื่อมต่อกับบนโฮสต์ระยะไกล โปรดทราบว่าตัวเลือกนี้เขียนด้วยตัวพิมพ์ใหญ่ 'P' เนื่องจาก -p ถูกสงวนไว้สำหรับการรักษาเวลาและโหมดของไฟล์ใน rcp (1) แล้ว

-p รักษาเวลาการแก้ไขเวลาการเข้าถึงและโหมดจากไฟล์ต้นฉบับ

อัปเดตและหลีกเลี่ยงเพื่อแสดงความคิดเห็นอย่างใดอย่างหนึ่ง (upvoted) :

เกี่ยวกับความคิดเห็นของ Abdull เกี่ยวกับscpคำสั่งออปชันสิ่งที่เขาแนะนำ

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

... , ตัวเลือกและพารามิเตอร์ getopt(1)กำหนดพารามิเตอร์ที่ชัดเจนว่าจะต้องมาหลังจากตัวเลือกและไม่ต้องสลับกับพวกเขา:

พารามิเตอร์ getopt ถูกเรียกด้วยสามารถแบ่งออกเป็นสองส่วน: ตัวเลือกที่ปรับเปลี่ยนวิธีที่ getopt จะทำการแยกวิเคราะห์ (ตัวเลือกและ optstring ใน SYNOPSIS) และพารามิเตอร์ที่จะแยกวิเคราะห์ (พารามิเตอร์ใน SYNOPSIS) ส่วนที่สองจะเริ่มต้นที่พารามิเตอร์ที่ไม่ใช่ตัวเลือกแรกที่ไม่ใช่อาร์กิวเมนต์ตัวเลือกหรือหลังจากการเกิดขึ้นครั้งแรกของ '-' หากไม่พบตัวเลือก '-o' หรือ '--options' ในส่วนแรกพารามิเตอร์แรกของส่วนที่สองจะถูกใช้เป็นสตริงตัวเลือกแบบย่อ

เนื่องจาก-rตัวเลือกบรรทัดคำสั่งไม่มีข้อโต้แย้งเพิ่มเติมsome_directoryคือ "พารามิเตอร์ที่ไม่ใช่ตัวเลือกแรกที่ไม่ใช่อาร์กิวเมนต์ตัวเลือก" ดังนั้นตามที่สะกดอย่างชัดเจนในgetopt(1)man page อาร์กิวเมนต์บรรทัดคำสั่งที่ประสบความสำเร็จทั้งหมดที่ตามมา (เช่น-P 80 ...) จะถือว่าไม่ใช่ตัวเลือก (และอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือก)

ดังนั้นในผลนี่คือวิธีgetopt(1)ดูตัวอย่างที่นำเสนอในตอนท้ายของตัวเลือกและจุดเริ่มต้นของพารามิเตอร์ที่แบ่งเขตโดยการประสบความสำเร็จ bing ข้อความในสีเทา:

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

สิ่งนี้ไม่เกี่ยวกับscpพฤติกรรมและทุกสิ่งที่เกี่ยวข้องกับวิธีการที่โปรแกรมมาตรฐาน POSIX แยกวิเคราะห์ตัวเลือกบรรทัดคำสั่งโดยใช้getopt(3)ชุดฟังก์ชั่น C

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการสั่งและประมวลผลบรรทัดคำสั่งโปรดอ่านgetopt(1)manpage โดยใช้:

man 1 getopt

88
btw scpต้องการลำดับตัวเลือกที่ถูกต้อง: scp -r some_directory -P 80 ...ไม่ทำงาน ----- แต่ใช้scp -P 80 -r some_directory ...งานได้
Abdull

9
โดยทั่วไปแล้วใน linux คำสั่งจะตามด้วยตัวเลือกและจากนั้นคำแนะนำ / ค่า
Gary

2
@Abdull ทราบว่าไดเรกทอรี scp -r -p 50193 / path / to / ทำงานได้ดี พารามิเตอร์พา ธ ของไฟล์ไม่ได้เชื่อมโยงกับตัวเลือกการเรียกซ้ำ -r
เบนจามิน

6
@Benjamin เว้นแต่ว่าคุณต้องการใช้พอร์ต 50193 ซึ่งในกรณีนี้ 'p' ของคุณควรเป็นตัวพิมพ์ใหญ่
ไม่มี

1
@Abdull: มีคำตอบที่askubuntu.com/a/307078/37574ที่อธิบายการ-Pสั่งซื้อพารามิเตอร์ โดยทั่วไปพอร์ตจะต้องไปก่อนโฮสต์ ทั้งสองนี้จะป้องกันความกำกวมและอนุญาตให้สอง-Pพารามิเตอร์ถ้าทั้งสองโฮสต์เป็นระยะไกล
mwfearnley

70

คำใบ้เพิ่มเติมหนึ่งข้อ วางตัวเลือก '-P' หลังจากคำสั่ง scp ไม่ว่าเครื่องที่คุณกำลังจะเข้าชมนั้นจะเป็นตัวเลือกที่สอง (ปลายทางที่รู้จัก) ตัวอย่าง:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder

46

คุณรู้ว่ามีอะไรเจ๋งกว่า-P? ไม่มีอะไร

หากคุณใช้เซิร์ฟเวอร์นี้มากกว่าสองสามครั้งให้ตั้งค่า / สร้าง~/.ssh/configไฟล์ด้วยรายการเช่น:

Host www.myserver.com
    Port 80

หรือ

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

จากนั้นคุณสามารถใช้:

scp username@www.myserver.com:/root/file.txt .

หรือ

scp short:/root/file.txt .

คุณสามารถใช้อะไรก็ได้ในบรรทัด "โฮสต์" ด้วย ssh, scp, rsync, git และอีกมากมาย

มีตัวเลือกการกำหนดค่ามากมายที่คุณสามารถใช้ในไฟล์กำหนดค่าดู:

man ssh_config


3
วิธีแก้ปัญหาเฉพาะที่อนุญาตให้ใช้scp -3จากและไปยังเซิร์ฟเวอร์ที่มี ssh listeners บนพอร์ตที่ต่างกัน scp -3 -P 123 server1:/file -P 456 server2:/fileหรือทางเลือกอื่นที่คล้ายกันจะไม่ทำงาน scp สันนิษฐานว่าพอร์ตเดียวกันในทั้งสองเซิร์ฟเวอร์
user88595

28

ฉันใช้พอร์ตที่แตกต่างกันแล้วมาตรฐานและคัดลอกไฟล์ระหว่างไฟล์เช่นนี้

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

นี่เป็นเพียงการใช้งานเป็นครั้งคราวหากมันซ้ำตัวเองตามตารางเวลาที่คุณควรใช้งาน rsync และ cron ที่จะทำมัน


7

สำหรับการใช้พอร์ตอื่นในคำสั่ง scp ให้ใช้ capital P แบบนี้

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

ยาอาลี


6

scp help บอกเราว่าพอร์ตถูกระบุโดยตัวพิมพ์ใหญ่ 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

หวังว่านี่จะช่วยได้


2

คัดลอกไฟล์ไปยังโฮสต์: scp SourceFile remoteuser@remotehost:/directory/TargetFile

คัดลอกไฟล์จากโฮสต์: scp user@host:/directory/SourceFile TargetFile

การคัดลอกไดเรกทอรีซ้ำจากโฮสต์: scp -r user@host:/directory/SourceFolder TargetFolder

หมายเหตุ : หากโฮสต์ใช้พอร์ตอื่นที่ไม่ใช่พอร์ต 22 คุณสามารถระบุได้ด้วยตัวเลือก -P: scp -P 2222 user@host:/directory/SourceFile TargetFile


6
เพียงแค่บันทึกจะ
เพียงพอ

2

สามารถทำได้โดยระบุพอร์ตผ่าน-Pสวิตช์:

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

2

หากคุณต้องการคัดลอกไฟล์ในเครื่องไปยังเซิร์ฟเวอร์ (ระบุพอร์ต)

scp -P 3838 /the/source/file username@server.com:/destination/file

0

หวังว่านี่จะช่วยให้ใครบางคนกำลังมองหาคำตอบที่สมบูรณ์แบบ

คัดลอกโฟลเดอร์หรือไฟล์จากเซิร์ฟเวอร์ที่มีพอร์ตที่กำหนดไว้ไปยังเซิร์ฟเวอร์หรือเครื่องอื่น

  1. ไปที่ไดเรกทอรีที่คุณมีสิทธิ์ของผู้ดูแลระบบโดยเฉพาะไดเรกทอรีบ้านของคุณบนเครื่องที่คุณต้องการคัดลอกไฟล์
  2. เขียนคำสั่งด้านล่าง

scp -r -P ผู้ใช้พอร์ต @ IP_address: / home / file / pathDirectory

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

0

มีคำตอบมากมาย แต่คุณควรจะทำให้มันง่าย ตรวจสอบให้แน่ใจว่าคุณรู้ว่าพอร์ต SSH กำลังฟังอยู่และกำหนดไว้ นี่คือสิ่งที่ฉันเพิ่งใช้ในการทำซ้ำปัญหาของคุณ

scp -P 12222 file.7z user@193.168.XX: / home / user / Downloads มันทำงานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.