Apakah ada cara untuk menyalurkan perintah git melalui proxy ssh?

Saya ingin membuat klien ssh yang akan mengirim perintah git ke proxy ssh yang akan menyalurkan data dua arah dari klien ke repositori server git (misalnya dihosting di github). Apakah ada cara mudah untuk melakukan ini? Saya mencoba yang berikut ini: https://www.systutorials.com/git-through-ssh-tunnel-as-proxy/ tidak berhasil. Semoga ini jelas.

Sesuatu seperti ini dengan klien mengirim misalnya git clone dan server SSH menyalurkan kembali file ke mesin klien

Klien SSH ‹---› Server SSH ‹---› Repo Github

Bantuan apa pun sangat dihargai!


person Solerus    schedule 25.06.2020    source sumber
comment
Coba ProxyJump. Di sisi klien konfigurasikan ssh untuk menggunakan server sebagai jump-host untuk GitHub.   -  person phd    schedule 25.06.2020
comment
Apa yang tidak berhasil untuk Anda?   -  person chepner    schedule 25.06.2020


Jawaban (2)


Solusi yang diberikan 'systutorials.com' benar, karena kurangnya beberapa info konfigurasi. Konfigurasi Lengkap :

vi ~/.ssh/config

Host github.com
        HostName github.com
        User git
        Port 22
        ProxyCommand nc -x 127.0.0.1:1080 %h %p
        IdentityFile ~/.ssh/id_rsa
  • '127.0.0.1:1080' adalah Server SSH Anda, Anda dapat mengubah alamatnya sesuai keinginan Anda
  • semoga beruntung
person HeartRunner    schedule 25.06.2020
comment
Saya mendapat kesalahan nc: invalid option -- 'x' saat mencoba menjalankan perintah - person Solerus; 26.06.2020
comment
'ProxyCommand nc -proxy 127.0.0.1:1080 %h %p' atau 'ProxyCommand nc -X 127.0.0.1:1080 %h %p' bergantung pada versi nc Anda, mencari detail di 'man nc'. Omong-omong, pastikan port tersebut (1080) adalah port Socks5 Anda - person HeartRunner; 26.06.2020
comment
Terima kasih atas tipnya sampai pada kesimpulan yang sama! Apakah ada alasan Anda berbicara tentang proksi kaos kaki5 ketika saya menyebutkan proksi ssh? - person Solerus; 28.06.2020
comment
Saya gagal menggunakan proksi http, menduga firewall menghentikannya. Port Socks5 berfungsi untuk saya. Apakah Anda berhasil menyalurkan perintah git melalui proksi http? - person HeartRunner; 29.06.2020
comment
Jadi pada dasarnya hop perantara di tengah bukanlah proxy http meskipun bisa jadi, melainkan proxy ssh (seperti yang terlihat di github.com/dutchcoders/sshproxy) berjalan pada port 2222; Saya dapat mengalihkan aliran ke proxy tetapi saya mendapatkan handshake failed error untuk saat ini. Terima kasih atas bantuan Anda! - person Solerus; 29.06.2020

Berikut solusi lainnya, untuk use case yang sedikit berbeda, yaitu:

  • Anda dapat mengakses github.com dari host, katakanlah, foo.
  • Anda sebenarnya perlu menyambungkannya dari host lain, misalnya bar.
  • Anda hanya perlu melakukan ini secara interaktif - tidak pernah dari tugas cron atau tindakan otomatis lainnya.
  • Namun, bar tidak diperbolehkan membuat koneksi TCP keluar - baik secara langsung atau melalui host proxy.
  • Anda dapat menggunakan SSH untuk terhubung dari foo ke bar.
  • Pada koneksi ini, Anda diperbolehkan untuk mengatur terowongan SSH terbalik.

Dalam situasi ini, Anda dapat melakukan hal berikut:

  1. Pada foo, di ~/.ssh/config, tentukan terowongan SSH terbalik untuk host bar.
  2. Pada bar, di ~/.ssh/config, tentukan titik akhir terowongan sebagai proksi untuk host github.com.

Misalnya, dengan versi OpenSSH yang cukup modern, Anda dapat menggunakan:

Host bar
  RemoteForward 22022 bar:22

pada foo, dan pada bar:

Host github.com
  ProxyJump localhost:22022

Sekarang, jika semuanya baik-baik saja, setelah melakukannya

slogin bar

pada foo, Anda dapat menggunakan, pada bar:

git clone [email protected]:github/gitignore.git

(atau repositori apa pun yang ingin Anda gunakan) dan ini akan mencoba menggunakan terowongan terbalik dari localhost:22022 ke foo untuk terhubung ke github.com.

Ini berfungsi untuk saya (dengan kedua host menjalankan Ubuntu 18.04).

Catatan:

  • Seharusnya dimungkinkan untuk mengganti baris ~/.ssh/config pada bar dengan sesuatu yang setara di ~/.gitconfig; misalnya menggunakan gitProxy atau [url (...) .insteadOf (...)]. Saya belum berhasil membuat ini berhasil.
  • Untuk menyambung ke github.com menggunakan HTTPS, bukan SSH, balikkan terowongan ke port 443, bukan 22.
  • Ini cukup rapuh, karena bergantung pada bit konfigurasi khusus pada foo dan bar yang bekerja bersama-sama. Jadi saya tidak akan merekomendasikan ini, kecuali untuk kasus penggunaan tertentu, yang sulit untuk memikirkan cara lain yang lebih baik.
person reinierpost    schedule 02.08.2021