เป็นไปได้หรือไม่ที่จะระบุพอร์ต ssh อื่นเมื่อใช้ rsync


366

ฉันลองคำสั่งต่อไปนี้แล้ว:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

SSH กำลังทำงานบนพอร์ต 2222 แต่ rsync ยังคงพยายามใช้พอร์ต 22 แล้วบ่นว่าไม่ได้หาพา ธ สาเหตุที่แน่นอนว่ามันไม่มีอยู่

ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะซิงค์กับโฮสต์ระยะไกลบนพอร์ต ssh ที่ไม่ได้มาตรฐาน

คำตอบ:


136

ตัวเลือกอื่นในโฮสต์ที่คุณเรียกใช้ rsync ให้ตั้งค่าพอร์ตในไฟล์ ssh config เช่น:

cat ~/.ssh/config
Host host
    Port 2222

จากนั้น rsync บน ssh จะพูดกับพอร์ต 2222:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

21
แม้ว่านี่ไม่ใช่คำตอบที่ชัดเจนที่สุด แต่ก็ยังเป็นคำตอบที่ดีมาก คุ้มค่ากับการใช้ SSH config สำหรับโฮสต์ที่คุณเชื่อมต่อมากกว่าหนึ่งครั้งหรือสองครั้งเพราะมันจะช่วยให้คุณประหยัดทั้งการคิดและพิมพ์
John Hunt เมื่อ

5
ถึงแม้ว่าจะยุติธรรม แต่ข้อเสียก็คือมันมองไม่เห็นคือหลังจากนั้นสักครู่หนึ่งอาจลืมว่ามันอยู่ในไฟล์ ssh config และไม่เข้าใจว่ามันทำงานอย่างไรหรือเพื่อนร่วมงานคนหนึ่งของคุณอาจคัดลอก / วางคำสั่งและไม่เข้าใจว่าทำไม มันไม่ทำงานในบัญชีของพวกเขา ถึงกระนั้นโดยส่วนตัวฉันไม่ต้องการพิมพ์หมายเลขพอร์ตตลอดเวลา
Joao Costa

1
นี่มันช่างน่ากลัว มันเข้ากันไม่ได้อย่างสมบูรณ์กับพอร์ต NATing ยกเว้นว่าคุณต้องการมีชื่อ DNS หลายชื่อสำหรับที่อยู่ IP เดียวกันซึ่งเป็นปัญหาการบำรุงรักษา
meffect

1
@melfect คุณล้อเล่นหรือไม่? ฉันจะไม่เรียกมันว่าน่ากลัวเท่าที่ฉันจะเรียกมันว่าสิ่งที่ยิ่งใหญ่ที่สุดที่เคยมีมาสำหรับคนที่ต้องการไปrsyncยังพอร์ตที่แปลก ๆ หลายครั้ง แต่ทุกครั้งที่มันแพร่กระจายออกไปมากพอที่คุณจะลืมไวยากรณ์
Freedom_Ben

1
แม้ว่าสิ่งนี้จะช่วยให้คุณเชื่อมต่อได้ง่ายขึ้น แต่ก็ทำให้แฮกเกอร์ได้ง่ายขึ้นและ auth.log ของคุณจะถูกล้นด้วยความพยายามอัตโนมัติอีกครั้ง ดังนั้นมันจึงเป็นช่องว่างในการเปลี่ยนพอร์ต
forthrin

625

บรรทัดคำสั่งของคุณควรมีลักษณะเช่นนี้:

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

ใช้งานได้ดี - ฉันใช้งานได้ตลอดเวลาโดยไม่จำเป็นต้องมีกฎไฟร์วอลล์ใหม่ - เพียงแค่สังเกตว่าคำสั่ง SSH นั้นอยู่ในเครื่องหมายคำพูด


8
ฉันสงสัยว่าทำไมมันถึงเป็นเช่นนั้น - มันเป็นความต้องการที่เห็นได้ชัดและยังคงซ่อนอยู่เนื่องจากนี่เป็นการสร้างนามแฝงให้กับไบนารี ssh อย่างมีประสิทธิภาพ (มันทำงานได้อย่างไม่มีที่ติ)
jsbueno

1
ทำงานร่วมกับสัญลักษณ์ลำไส้ใหญ่user@host:/path
DmitrySandalov

23
ส่วนสำคัญของคำสั่งคือ -e 'ssh -p 2222' เพื่อให้คุณสามารถใช้สิ่งนี้กับ rsync params ที่แตกต่างกัน
Evan Donovan

2
โปรดทราบว่าหากคุณต้องการระบุคีย์ ssh คุณสามารถทำได้เช่น -e 'ssh -i mykey -p 2222'
dranxo

9
ทำไม - ลบไฟล์ที่ส่ง? ถ้ามันเป็นอันตรายต่อแหล่งข้อมูลที่ดีกว่าพูดถึงมัน ...
ทิว

14

เมื่อคุณต้องการส่งไฟล์ผ่านพอร์ต SSH เฉพาะ:

rsync -azP -e "ssh -p PORT_NUMBER" source destination

ตัวอย่าง

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination

3
และสิ่งนี้จะเพิ่มคำตอบที่มีอยู่อย่างแน่นอน?
Chris Maes

ดูรูปแบบและตัวอย่าง ฉันมีสิ่งที่ง่ายที่นี่
Techie

4
ตกลงคุณเอาสองตัวเลือกตัวเลือก แต่ในสาระสำคัญคำตอบของคุณคือสิ่งเดียวกับที่ยอมรับหนึ่ง ...
คริส Maes

2
มันง่ายและจัดรูปแบบมากขึ้น ง่ายต่อการเข้าใจสำหรับผู้เรียนใหม่ ขอบคุณสำหรับการลงคะแนนเสียงโดยไม่มีเหตุผล
Techie

13

ใช้ "ตัวเลือก rsh" เช่น:

rsync -avz --rsh='ssh -p3382' root@remote_server_name:/opt/backups

อ้างถึง: http://www.linuxquestions.org/questions/linux-software-2/rsync-ssh-on-different-port-448112/


ทำงานให้ฉันด้วย! ฉันไม่รู้ว่าทำไมคำตอบที่ได้รับการโหวตมากที่สุดใช้ไม่ได้ ...
ch271828n

ทำงานให้ฉันด้วย! ฉันต้องการคำหลัก "--rsh"
แทวูลี

2

เป็นเรื่องเล็กน้อย แต่อาจช่วยใครซักคน หากคุณต้องการรหัสผ่านและพอร์ตฉันแนะนำให้ใช้sshpassแพ็คเกจ คำสั่งบรรทัดคำสั่งจะมีลักษณะเช่นนี้: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


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

2

ฉันพบโซลูชันนี้ในไซต์ของ Mike Hike Hostetlerที่ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

3
และสิ่งนี้จะเพิ่มคำตอบที่มีอยู่อย่างแน่นอน?
Chris Maes

Nice หนึ่งทำงานได้อย่างสมบูรณ์แบบ ขอบคุณ :)
Sammu Sundar

2

ไวยากรณ์ที่ถูกต้องคือการบอกให้ Rsync ใช้คำสั่ง SSH ที่กำหนดเอง (เพิ่ม -p 2222) ซึ่งสร้างอุโมงค์ที่ปลอดภัยไปยังด้านระยะไกลโดยใช้ SSH จากนั้นเชื่อมต่อผ่าน localhost: 873

rsync -rvz - ความคืบหน้า - ลบไฟล์ที่ส่ง -e "ssh -p 2222" ./dir user @ host / path

Rsync ทำงานเป็น daemon บนพอร์ต TCP 873 ซึ่งไม่ปลอดภัย

จากมนุษย์ Rsync:

พุช: rsync [OPTION ... ] SRC ... [USER @] HOST: DEST

ซึ่งทำให้ผู้คนเข้าใจผิดในการลอง:

rsync -rvz --progress - ลบไฟล์ที่ส่งแล้ว / ผู้ใช้ @ host: 2222 / เส้นทาง

อย่างไรก็ตามนั่นคือคำสั่งให้เชื่อมต่อกับRsync daemon บนพอร์ต 2222 ซึ่งไม่ได้อยู่ที่นั่น


คำตอบอื่น ๆ ไม่ได้พูดถึงพอร์ต 873
kevinf

คำถามคือทำอย่างไรจึงจะให้มันทำงานเหมือน ssh บนพอร์ต 2222; หรือว่า rsync ต้องการมันเป็นเรื่องที่แตกต่าง
Dan Steingart

@DanSteingart ฉันได้อัพเดตคำตอบแล้วมันช่วยได้มากกว่านี้ไหม?
kevinf

-3

ฉันไม่สามารถรับ rsync เพื่อเชื่อมต่อผ่าน ssh บนพอร์ตอื่นได้ แต่ฉันสามารถเปลี่ยนทิศทางการเชื่อมต่อ ssh ไปยังคอมพิวเตอร์ที่ฉันต้องการผ่าน iptables นี่ไม่ใช่วิธีการแก้ปัญหาที่ฉันกำลังมองหา แต่มันแก้ไขปัญหาของฉันได้

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