มีวิธีในการรับคำสั่ง git tunnel ผ่านพร็อกซี ssh หรือไม่?

ฉันต้องการสร้างไคลเอนต์ ssh ที่จะส่งคำสั่ง git ไปยังพร็อกซี ssh ที่จะไพพ์ข้อมูลในลักษณะสองทิศทางจากไคลเอนต์ไปยังที่เก็บเซิร์ฟเวอร์ git (เช่น โฮสต์บน github) มีวิธีง่ายๆ ในการทำเช่นนี้หรือไม่? ฉันลองทำสิ่งต่อไปนี้: https://www.systutorials.com/git-through-ssh-tunnel-as-proxy/ โดยไม่มีโชค หวังว่านี่จะชัดเจน

บางสิ่งเช่นนี้โดยไคลเอนต์ส่งตัวอย่าง git clone และเซิร์ฟเวอร์ SSH ส่งไฟล์กลับไปยังเครื่องไคลเอนต์

ไคลเอนต์ SSH ‹---› เซิร์ฟเวอร์ SSH ‹---› Github Repo

ความช่วยเหลือใด ๆ ที่ชื่นชมจริงๆ!


person Solerus    schedule 25.06.2020    source แหล่งที่มา
comment
ลองใช้ ProxyJump ที่ฝั่งไคลเอ็นต์กำหนดค่า ssh เพื่อใช้เซิร์ฟเวอร์เป็นโฮสต์ข้ามสำหรับ GitHub   -  person phd    schedule 25.06.2020
comment
อะไรไม่ได้ผลสำหรับคุณ?   -  person chepner    schedule 25.06.2020


คำตอบ (2)


วิธีแก้ปัญหาที่ 'systutorials.com' ให้มานั้นถูกต้อง เนื่องจากขาดข้อมูลการกำหนดค่าบางอย่าง การกำหนดค่าที่สมบูรณ์:

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' คือเซิร์ฟเวอร์ SSH ของคุณ คุณสามารถแก้ไขที่อยู่เป็นของคุณได้
  • ขอให้โชคดี
person HeartRunner    schedule 25.06.2020
comment
ฉันได้รับข้อผิดพลาด nc: invalid option -- 'x' เมื่อพยายามเรียกใช้คำสั่ง - person Solerus; 26.06.2020
comment
'ProxyCommand nc -proxy 127.0.0.1:1080 %h %p' หรือ 'ProxyCommand nc -X 127.0.0.1:1080 %h %p' ขึ้นอยู่กับเวอร์ชัน nc ของคุณ โดยค้นหารายละเอียดใน 'man nc' อย่างไรก็ตาม ตรวจสอบให้แน่ใจว่าพอร์ต (1080) เป็นพอร์ต Socks5 ของคุณ - person HeartRunner; 26.06.2020
comment
ขอบคุณสำหรับคำแนะนำ มาถึงข้อสรุปเดียวกัน ! มีเหตุผลที่คุณพูดถึงพร็อกซี Socks5 เมื่อฉันพูดถึงพร็อกซี ssh หรือไม่ - person Solerus; 28.06.2020
comment
ฉันใช้ http พร็อกซีล้มเหลว โดยเดาว่าไฟร์วอลล์หยุดทำงาน พอร์ต Socks5 ใช้งานได้สำหรับฉัน คุณประสบความสำเร็จในคำสั่ง git tunneling ผ่านพร็อกซี http หรือไม่ - person HeartRunner; 29.06.2020
comment
ดังนั้นโดยพื้นฐานแล้วการกระโดดระดับกลางที่อยู่ตรงกลางไม่ใช่พร็อกซี http แม้ว่าจะเป็นได้ แต่เป็นพร็อกซี ssh แทน (ดังที่เห็นใน github.com/dutchcoders/sshproxy) ทำงานบนพอร์ต 2222; ฉันสามารถเปลี่ยนเส้นทางโฟลว์ไปยังพร็อกซีได้ แต่ตอนนี้ฉันได้รับ handshake failed error ขอบคุณสำหรับความช่วยเหลือของคุณ! - person Solerus; 29.06.2020

นี่เป็นอีกวิธีหนึ่งสำหรับกรณีการใช้งานที่แตกต่างกันเล็กน้อย กล่าวคือ:

  • คุณสามารถเข้าถึง github.com จากโฮสต์ เช่น foo
  • จริงๆ แล้วคุณจำเป็นต้องเชื่อมต่อจากโฮสต์อื่น เช่น bar
  • คุณต้องทำสิ่งนี้แบบโต้ตอบเท่านั้น - ไม่เคยมาจากงาน cron หรือการดำเนินการอัตโนมัติอื่น ๆ
  • อย่างไรก็ตาม bar ไม่ได้รับอนุญาตให้ทำการเชื่อมต่อ TCP ขาออก ไม่ว่าจะโดยตรงหรือผ่านโฮสต์พร็อกซี
  • คุณสามารถใช้ SSH เพื่อเชื่อมต่อตั้งแต่ foo ถึง bar
  • ในการเชื่อมต่อนี้ คุณได้รับอนุญาตให้ตั้งค่าอุโมงค์ SSH แบบย้อนกลับ

ในสถานการณ์นี้ คุณสามารถทำสิ่งต่อไปนี้:

  1. บน foo ใน ~/.ssh/config ให้ระบุช่องสัญญาณ SSH แบบย้อนกลับสำหรับโฮสต์ bar
  2. บน bar ใน ~/.ssh/config ให้ระบุจุดปลายช่องสัญญาณเป็นพร็อกซีสำหรับโฮสต์ github.com

ตัวอย่างเช่น ด้วย OpenSSH เวอร์ชันที่ทันสมัยพอสมควร คุณสามารถใช้:

Host bar
  RemoteForward 22022 bar:22

บน foo และบน bar:

Host github.com
  ProxyJump localhost:22022

ตอนนี้ถ้าทุกอย่างดีหลังจากทำ

slogin bar

บน foo คุณสามารถใช้ บน bar:

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

(หรือพื้นที่เก็บข้อมูลใดๆ ก็ตามที่คุณต้องการใช้) และจะพยายามใช้ช่องสัญญาณย้อนกลับจาก localhost:22022 ถึง foo เพื่อเชื่อมต่อกับ github.com

สิ่งนี้ใช้ได้กับฉัน (ทั้งโฮสต์ที่ใช้ Ubuntu 18.04)

หมายเหตุ:

  • ควรเป็นไปได้ที่จะแทนที่บรรทัด ~/.ssh/config บน bar ด้วยสิ่งที่เทียบเท่าใน ~/.gitconfig; เช่น การใช้ gitProxy หรือ [url (...) .insteadOf (...)] ฉันไม่สามารถทำงานนี้ได้
  • หากต้องการเชื่อมต่อกับ github.com โดยใช้ HTTPS แทน SSH ให้ย้อนกลับช่องสัญญาณไปยังพอร์ต 443 แทน 22
  • สิ่งนี้ค่อนข้างเปราะบาง เนื่องจากต้องใช้การกำหนดค่าบิตพิเศษบน foo และ bar ที่ทำงานควบคู่กัน ดังนั้นฉันจะไม่แนะนำสิ่งนี้ ยกเว้นกรณีการใช้งานที่กำหนด ซึ่งยากที่จะคิดอะไรที่ดีกว่านี้
person reinierpost    schedule 02.08.2021