Git บนพอร์ต SSH ที่กำหนดเอง


149

ผู้ให้บริการ VPS ของฉันแนะนำให้ฉันปล่อยให้พอร์ต SSH ของฉันไปยังหมายเลขพอร์ตที่กำหนดเองที่พวกเขากำหนดโดยค่าเริ่มต้น (ไม่ใช่ 22) สิ่งที่เป็นในขณะที่ฉันรู้ว่าฉันสามารถให้หมายเลขพอร์ตเมื่อสร้างการกำหนดค่าระยะไกลดูเหมือนว่าฉันไม่สามารถทำเช่นเดียวกันเมื่อทำโคลนคอมไพล์ ฉันใช้ gitolite ดังนั้นฉันจึงคำสั่งโคลนเหมือน:

git clone git@mydomain.com:gitolite-admin

มีวิธีแอบแฝงนี้เพื่อใช้หมายเลขพอร์ต ssh ที่กำหนดเองหรือไม่

ฉันควรจะพูดถึงฉันกำลังใช้ cygwin บน windows ฉันเคยเห็นหลายที่บอกว่าจะเพิ่มพอร์ตที่กำหนดเองลงใน~/.ssh/configไฟล์เช่น

Host mydomain.com
    Port 12345

อย่างไรก็ตามใน cygwin ดูเหมือนว่าไฟล์นั้นจะไม่มีอยู่จริง


8
ชื่อพา ธ ของไฟล์คือ .ssh/config(ไม่ใช่conf) ในโฮมไดเรกทอรีของผู้ใช้ ไม่จำเป็นสำหรับการดำเนินการขั้นพื้นฐานและดังนั้นจึงไม่มีอยู่ตามค่าเริ่มต้น คุณจะต้องสร้างมันขึ้นมา ลองvim ~/.ssh/config(หรือใช้โปรแกรมแก้ไขข้อความที่คุณต้องการติดตั้ง) เพื่อเปิด / สร้าง
Chris Johnsen


บน Windows ที่จะอ่าน/Users/USERX/.ssh/configคุณจะต้องตั้งของสภาพแวดล้อมในท้องถิ่นเพื่อHOME /Users/USERX
kenorb

คำตอบ:


327
git clone ssh://git@mydomain.com:[port]/gitolite-admin

โปรดทราบว่าหมายเลขพอร์ตควรอยู่ที่นั่นโดยไม่มีเครื่องหมายวงเล็บเหลี่ยม: []


สิ่งนี้ใช้ได้ผล แต่การแก้ไข Chris Johnsen อนุญาตให้มี url ที่สะอาดเมื่อใช้หมายเลขพอร์ตที่กำหนดเอง
ryanzec

6
:-) ถ้าคุณถามฉันไวยากรณ์ URL คอมไพล์ไม่สะอาดและข้างต้นเป็นปกติมากขึ้น
Christo

ฉันจะยอมรับว่าซินแทกซ์ที่คุณให้นั้นมีความหมายมากกว่า แต่ต้องจำไว้ว่าให้เพิ่มหมายเลขพอร์ตที่กำหนดเองนั้นน่ารำคาญ การกำหนดค่าหมายเลขพอร์ตนั้นและไม่ต้องจำไว้ว่าเป็นบิตง่ายขึ้น แต่กับแต่ละของตัวเอง (ที่ว่าทำไมมันสามารถทำได้ทั้งสองวิธี) :)
ryanzec

48
โปรดทราบว่าจะไม่ทำงานหากคุณลบโปรโตคอล นั่นคือหากคุณลองทำสิ่งต่อไปนี้มันจะไม่ทำงาน git clone git@mydomain.com:[port]/gitolite-admin
Bijay Rungta

1
บน Windows ด้วย plink ไวยากรณ์การทำงานน่าจะเป็นgit clone ssh://git@mydomain.com:port/home/user/gitolite-admin
Roman Plášil

18

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

1 ปัญหาเกี่ยวกับไฟล์ ssh config คืออะไร?

เมื่อไม่มีไฟล์ config คุณสามารถสร้างได้ นอกเหนือportจากไฟล์กำหนดค่าสามารถรวมตัวเลือก ssh อื่น ๆ : user IdentityFileและอื่น ๆ ไฟล์กำหนดค่าจะมีลักษณะดังนี้

Host mydomain.com
    User git
    Port 12345

หากคุณใช้งาน linux อยู่ให้ดูแลไฟล์กำหนดค่าต้องได้รับอนุญาตอย่างเข้มงวด: อ่าน / เขียนสำหรับผู้ใช้และคนอื่นไม่สามารถเข้าถึงได้

2 แล้วทาง ssh url ล่ะ?

มันยอดเยี่ยมสิ่งเดียวที่เราควรรู้คือมีสองไวยากรณ์สำหรับ ssh url ในคอมไพล์

  • ไวยากรณ์มาตรฐาน ssh://[user@]host.xz[:port]/path/to/repo.git/
  • SCP เช่นไวยากรณ์ [user@]host.xz:path/to/repo.git/

โดยค่าเริ่มต้น Gitlab และ Github จะแสดงscp เช่น URL ของไวยากรณ์และเราไม่สามารถให้พอร์ต ssh ที่กำหนดเองได้ ดังนั้นเพื่อที่จะเปลี่ยนพอร์ต ssh เราต้องใช้ไวยากรณ์มาตรฐาน


14

เมื่อคุณต้องการพา ธ สัมพัทธ์จากโฮมไดเร็กตอรี่ของคุณ (บน UNIX ใด ๆ ) คุณใช้ไวยากรณ์ที่แปลกประหลาดนี้:

ssh://[user@]host.xz[:port]/~[user]/path/to/repo

ตัวอย่างเช่นถ้า repo อยู่ใน/home/jack/projects/jillwebเซิร์ฟเวอร์jill.comและคุณกำลังเข้าสู่ระบบเช่นเดียวjackกับการsshdฟังพอร์ต 4242:

ssh://jack@jill.com:4242/~/projects/jillweb

และเมื่อเข้าสู่ระบบในฐานะjill(สมมติว่าคุณมีสิทธิ์ของไฟล์):

ssh://jill@jill.com:4242/~jack/projects/jillweb


ชายคนนี้ต้องนิ่งงันอยู่พักหนึ่งและเป็นสิ่งที่ฉันต้องการรู้ คุณรู้ไหมว่าเอกสารนี้อยู่ที่ไหน
Shaun Wilson

@ Shaun Wilson ขออภัยฉันจำไม่ได้ แต่ฉันใช้เวลาสักครู่เพื่อค้นหาคำตอบดังนั้นฉันจึงคิดว่าฉันควรแบ่งปันที่นี่เนื่องจากนี่เป็นหนึ่งในจุดจบของฉัน
Daniel Santos

1
ขอบคุณ! โดยเฉพาะอย่างยิ่งถ้าคุณอยู่ในแผนการโฮสต์ที่ใช้ร่วมกันส่วน ~ [ผู้ใช้] มีความสำคัญ สิ่งนี้ช่วยให้ฉันลอกแบบ repo ของฉันได้
จิมวิลสัน

2
@ShaunWilson สเป็คพา ธ เป็นพา ธ UNIX มาตรฐาน หากคุณล็อกอินเข้าสู่ระบบ UNIX ~ จะเป็นการจดชวเลขสำหรับโฮมไดเร็กทอรีมันมีประโยชน์ทั้งในการบันทึกการพิมพ์จำนวนมากและเนื่องจากโฮมไดเร็กทอรีอาจอยู่ในตำแหน่งที่ไม่ได้มาตรฐาน ด้านบนอาจไม่ทำงานบนเซิร์ฟเวอร์ Windows
ซามูเอลÅslund

@Samuel Åslundขอบคุณฉันได้อัปเดตคำตอบแล้ว ฉันมักจะลืมเกี่ยวกับ Windows เพราะ ... ดีฉันไม่ได้หมายความว่าไม่มีรสนิยมที่ดี แต่มันน่ากลัวในการเปรียบเทียบ ไม่น้อยไปกว่านี่คือความแตกต่างที่สำคัญ
Daniel Santos

9

(อัปเดต: ไม่กี่ปีต่อมา Google และ Qwant "สายการบิน" ยังคงส่งฉันที่นี่เมื่อค้นหา "git non-default ssh port") วิธีที่ดีกว่าในรุ่น git ที่ใหม่กว่าคือการใช้ GIT_SSH_COMMAND ENV.VAR เช่น:

GIT_SSH_COMMAND="ssh -oPort=1234 -i ~/.ssh/myPrivate_rsa.key" \ git clone myuser@myGitRemoteServer:/my/remote/git_repo/path

นี่เป็นข้อดีเพิ่มเติมของการอนุญาตให้ตัวเลือก ssh อื่น ๆ ที่เหมาะสม (พอร์ต, คีย์ส่วนตัว, IPv6, อุปกรณ์ PKCS # 11, ... )

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