Git On Custom SSH Port

149

Penyedia VPS saya merekomendasikan agar saya membiarkan port SSH saya ke nomor port khusus yang mereka tetapkan secara default (bukan 22). Masalahnya adalah sementara saya tahu saya bisa memberikan nomor port ketika membuat konfigurasi jarak jauh, sepertinya saya tidak bisa melakukan hal yang sama ketika melakukan klon git. Saya menggunakan gitolite jadi saya mengkloning perintah seperti:

git clone [email protected]:gitolite-admin

Apakah ada cara untuk menutupinya dengan menggunakan nomor port ssh khusus?

Saya juga harus menyebutkan saya menjalankan cygwin di windows. Saya telah melihat banyak tempat yang mengatakan untuk menambahkan port khusus ke ~/.ssh/configfile seperti

Host mydomain.com
    Port 12345

Namun dalam cygwin, file itu sepertinya tidak ada.

ryanzec
sumber
8
Pathname file .ssh/config(tidak conf) di direktori home pengguna Anda. Tidak diperlukan untuk operasi dasar, dan dengan demikian tidak ada secara default. Anda harus membuatnya. Coba vim ~/.ssh/config(atau gunakan editor teks pilihan Anda) untuk membuka / membuatnya.
Chris Johnsen
Pada Windows untuk membaca /Users/USERX/.ssh/configAnda perlu mengatur HOMElingkungan lokal Anda /Users/USERX.
kenorb

Jawaban:

327
git clone ssh://[email protected]:[port]/gitolite-admin

Perhatikan bahwa nomor port harus ada di sana tanpa tanda kurung: []

Christo
sumber
Ini berhasil namun koreksi Chris Johnsen memungkinkan url bersih saat menggunakan nomor port khusus
ryanzec
6
:-) Jika Anda bertanya kepada saya, sintaks git URL tidak bersih, dan di atas lebih dinormalisasi
Christo
Saya akui bahwa sintaks yang Anda berikan lebih deskriptif tetapi harus ingat untuk menambahkan nomor port khusus itu mengganggu. Mengkonfigurasi nomor port itu dan kemudian tidak harus mengingat itu sedikit lebih mudah tetapi untuk masing-masing sendiri (itu sebabnya dapat dilakukan dua arah) :)
ryanzec
48
Perhatikan bahwa itu tidak akan berfungsi jika Anda menghapus protokol. yaitu jika Anda mencoba yang berikut ini, itu tidak akan berhasil. git clone [email protected]:[port]/gitolite-admin
Bijay Rungta
1
pada Windows dengan plink, sintaks yang berfungsi tampaknya adalahgit clone ssh://[email protected]:port/home/user/gitolite-admin
Roman Plášil
18

Jawaban di atas bagus dan bagus, tetapi tidak jelas untuk pengguna git baru seperti saya. Jadi setelah beberapa penyelidikan, saya menawarkan jawaban baru ini.

1 apa masalahnya dengan cara file ssh config?

Ketika file konfigurasi tidak ada, Anda dapat membuatnya. Selain portitu file konfigurasi dapat menyertakan opsi konfigurasi ssh lainnya: user IdentityFiledan seterusnya, file konfigurasi tersebut terlihat seperti

Host mydomain.com
    User git
    Port 12345

Jika Anda menjalankan linux, hati-hati file config harus memiliki izin yang ketat: baca / tulis untuk pengguna, dan tidak dapat diakses oleh orang lain

2 bagaimana dengan cara ssh url?

Ini keren, satu-satunya hal yang harus kita ketahui adalah ada dua sintaks untuk url ssh di git

  • sintaks standar ssh://[user@]host.xz[:port]/path/to/repo.git/
  • scp seperti sintaks [user@]host.xz:path/to/repo.git/

Secara default Gitlab dan Github akan menampilkan scp seperti url sintaks , dan kami tidak dapat memberikan port ssh kustom. Jadi untuk mengubah port ssh, kita perlu menggunakan sintaks standar

Jim Green
sumber
14

Saat Anda menginginkan jalur relatif dari direktori home Anda (di UNIX apa pun), Anda menggunakan sintaks aneh ini:

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

Sebagai contoh, jika repo ini di /home/jack/projects/jillwebdi server jill.comdan Anda login sebagai jackdengan sshdmendengarkan pada port 4242:

ssh://[email protected]:4242/~/projects/jillweb

Dan ketika masuk sebagai jill(dengan anggapan Anda memiliki izin file):

ssh://[email protected]:4242/~jack/projects/jillweb

Daniel Santos
sumber
Orang ini telah buntung untuk sementara waktu dan persis apa yang perlu saya ketahui. Anda tahu di mana ini didokumentasikan?
Shaun Wilson
@Shaun Wilson Maaf, saya tidak begitu ingat. Tetapi butuh beberapa saat untuk menemukan jawabannya, jadi saya pikir saya harus membagikannya di sini, karena ini adalah salah satu jalan buntu saya.
Daniel Santos
1
Terima kasih! Terutama jika Anda menggunakan paket hosting bersama, bagian ~ [pengguna] itu penting. Ini membantu saya mengkloning repo saya.
Jim Wilson
2
@ShaunWilson spec path adalah path UNIX standar. Jika Anda masuk ke sistem UNIX ~ adalah singkatan untuk direktori-rumah berguna untuk menyimpan banyak pengetikan dan karena direktori home mungkin terletak di tempat-tempat yang tidak standar. Di atas mungkin tidak berfungsi pada server Windows.
Samuel Åslund
@Samuel Åslund Terima kasih, saya telah memperbarui jawaban saya. Saya sering lupa tentang Windows karena, ... well, saya tidak bermaksud norak, tapi ini perbandingannya mengerikan. Namun demikian, ini adalah perbedaan penting.
Daniel Santos
9

(Pembaruan: beberapa tahun kemudian Google dan Qwant "airlines" masih mengirim saya ke sini ketika mencari "git non-default ssh port") Cara yang mungkin lebih baik dalam versi git yang lebih baru adalah dengan menggunakan GIT_SSH_COMMAND ENV.VAR seperti:

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

Ini memiliki keuntungan tambahan dengan memungkinkan opsi ssh lainnya yang sesuai (port, priv.key, IPv6, perangkat PKCS # 11, ...).

earizon
sumber