การใช้ที่เก็บระยะไกลกับพอร์ตที่ไม่ได้มาตรฐาน


125

ฉันกำลังตั้งค่าโปรเจ็กต์ git ในเครื่องของฉันสำหรับที่เก็บระยะไกล ที่เก็บระยะไกลกำลังให้บริการบนพอร์ตที่ไม่ได้มาตรฐาน (4019)

แต่มันไม่ได้ผล แต่ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ssh: connect to host git.host.de:4019 port 22: Connection refused
fatal: The remote end hung up unexpectedly
error: failed to push to 'ssh://root@git.host.de:4019/var/cache/git/project.git'

การกำหนดค่าคอมไพล์ในเครื่องของฉันมีดังนี้ :

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
[remote "origin"]
  url = ssh://root@git.host.de:4019/var/cache/git/project.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master

(พอร์ตและโฮสต์เป็นตัวยึดสำหรับพอร์ตและโฮสต์จริง)

เกิดอะไรขึ้นกับการกำหนดค่าคอมไพล์ของฉัน


8
ดูเหมือนว่าถ้าคุณไม่ได้ใส่ไว้ssh://หน้า url อย่างชัดเจนมันจะคิดว่าเป็นรูปแบบอื่น ดังนั้นssh://example.com:444/etc/คือ / etc / บน example.com ผ่านพอร์ต 44 ในขณะที่example.com:444/etc// 444 / etc / บน example.com ผ่านพอร์ต 22
Kzqai

5
@Kzqai หมายเหตุเป็นสิ่งสำคัญ เช่นถ้าคุณทำgit remote set-url origin git@altssh.bitbucket.org:443/yourname/yourrepo/มันเคยชิน แต่ถ้าคุณทำเช่นgit remote set-url origin ssh://git@altssh.bitbucket.org:443/yourname/yourrepo/นี้จะได้ผล
โอ๊ค

สำหรับ Google-fu - ฉันมีปัญหากับ phabricator เมื่อฉันตั้งค่าเป็นพอร์ตที่ไม่ใช่ค่าเริ่มต้นของ 2222 ตอนนี้เรียงลำดับแล้ว!
user3791372

คำตอบ:


116

หากคุณใส่สิ่งนี้ใน.ssh/config:

Host githost
HostName git.host.de
Port 4019
User root

จากนั้นคุณควรจะสามารถใช้ไวยากรณ์พื้นฐาน:

git push githost:/var/cache/git/project.git master

4
การกำหนดค่า SSH อาจเป็นวิธีแก้ปัญหา แต่สิ่งนี้ทำให้ฉันสนใจเพราะ man git-push บอกว่ารูปแบบ ssh url ที่ยอมรับคือ ssh: // [user @] host.xz [: port] /path/to/repo.git /
gnud

1
ฉันไม่แน่ใจว่าอาจเป็นปัญหาเวอร์ชัน configuration git / ssh เนื่องจากฉันพยายามส่งไปยัง ssh: // fake @ localhost: 333 / ที่อยู่ปลอมและได้รับ (ตามที่คาดไว้) "port 333: Connection ปฏิเสธ"
CB Bailey

35
สนใจทุกคนที่ยังต้องการสิ่งนี้ ไวยากรณ์ใช้git clone ssh://username@hostname:333/~/repoสำหรับเส้นทางที่สัมพันธ์กับโฮมไดเร็กทอรีของคุณหรือgit clone ssh://username@hostname:333/path/to/repoสำหรับพา ธ สัมบูรณ์
Brandon Wamboldt

บนเครื่อง windows: c: / windows / system32 / drivers / etc / hosts เพื่อตั้งชื่อโฮสต์หากจำเป็น (เช่นเครื่องเสมือน / เซิร์ฟเวอร์)
user3791372

จะทำได้อย่างไรหากฉันมี IP ไม่ใช่ชื่อโฮสต์ ฉันถามเพราะเรายังไม่ได้เชื่อมโยงชื่อโฮสต์กับ ip ของเรา
ThisIsNotAnId

130

วิธีการเข้าถึง git ที่ใช้ SSH สามารถระบุได้<repo_path>/.git/configโดยใช้ URL แบบเต็มหรือไวยากรณ์คล้าย SCP ตามที่ระบุในhttp://git-scm.com/docs/git-clone :

รูปแบบ URL:

url = ssh://[user@]host.xz[:port]/path/to/repo.git/

สไตล์ SCP:

url = [user@]host.xz:path/to/repo.git/

สังเกตว่ารูปแบบ SCP ไม่อนุญาตให้มีการเปลี่ยนพอร์ตโดยตรงโดยอาศัยssh_configคำจำกัดความของโฮสต์แทน~/.ssh/configเช่น:

Host my_git_host
HostName git.some.host.org
Port 24589
User not_a_root_user

จากนั้นคุณสามารถทดสอบในเชลล์ด้วย:

ssh my_git_host

และเปลี่ยน URI สไตล์ SCP ของคุณ<repo_path>/.git/configเป็น:

url = my_git_host:path/to/repo.git/

1
Soooooo ... สิ่งที่จำเป็นจริงๆคือการเพิ่ม ssh: // ข้างหน้า url อาจเป็นได้
Kzqai

1
ไม่ทราบว่าคุณสามารถระบุ ssh urls หรือ scp (ค่าเริ่มต้น) ไม่อนุญาตให้ใช้หมายเลขพอร์ต ดีแล้วที่รู้.
Powerlord

1
scp อนุญาตให้ใช้หมายเลขพอร์ตได้จริง (แต่คีย์ตัวเลือกต้องเป็นตัวพิมพ์ใหญ่ P):scp -P 2020 file/to/copy user@host:path/to/copy/file/to
Drew

1
สำหรับฉันมันก็เพียงพอที่จะเพิ่มของฉันssh:// หากโปรโตคอลจะหายไปแล้วใช้คอมไพล์พอร์ตเริ่มต้น:url 22ขอบคุณ.
Marek Podyma

28

ลองทำตามนี้

git clone ssh://user@32.242.111.21:11111/home/git/repo.git

1
สวัสดี Ricky มันใช้งานได้กับฉันด้วย syntax git clone ssh: // user @ machine: port / path-to-repo โดยที่คุณเขียนเครื่องต้องเป็นผู้ใช้ขอบคุณ
rtrujillor

9

วิธีนี้หลีกเลี่ยงปัญหาของคุณแทนที่จะแก้ไขโดยตรง แต่ขอแนะนำให้เพิ่ม~/.ssh/configไฟล์และมีสิ่งนี้

Host git_host
HostName git.host.de
User root
Port 4019

จากนั้นคุณสามารถมี

url = git_host:/var/cache/git/project.git

และคุณยังสามารถssh git_hostและscp git_host ...และทุกอย่างจะทำงานออกมา


7

SSH ไม่ใช้:ไวยากรณ์เมื่อระบุพอร์ต วิธีที่ง่ายที่สุดคือแก้ไข~/.ssh/configไฟล์ของคุณและเพิ่ม:

โฮสต์ git.host.de
  พอร์ต 4019

จากนั้นระบุgit.host.deโดยไม่มีหมายเลขพอร์ต

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