คำตอบของสโนว์บอลช่วยได้มาก อย่างไรก็ตามฉันได้ทำการแก้ไขคำสั่งและต้องการอธิบายวิธีการทำงาน รับสถานการณ์นี้:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
แก้ไข~/.ssh/configไฟล์ของคุณและเพิ่มโฮสต์Bที่คุณต้องการข้ามไปเพียงแค่คุณกำหนดค่าโฮสต์:
Host B
User myusername
HostName b.mycompany.com
จากนั้นคุณเพิ่มโฮสต์Cที่คุณต้องการท้าย:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
สังเกตProxyCommandที่:
ssh -T -qบ่งชี้ว่าไม่ควรจัดสรรหลอก -TTY ( -T) และจะเงียบ ( -q);
- ครั้งหนึ่งในการกระโดดโฮสต์
Bเราเพิ่มกุญแจลงในคีย์ SSH ของการAผ่านssh-add;
- ซึ่งทำงานได้เพียงเพราะเราส่งตัวแทน SSH
-o 'ForwardAgent yes'ใช้
ssh-add -t 1 ระบุว่าฉันต้องการเพิ่มคีย์สำหรับ 1 วินาทีที่จำเป็นในการตรวจสอบสิทธิ์กับโฮสต์ C สุดท้ายเท่านั้น
- และในที่สุดก็
nc %h %pเริ่มการnetcatเชื่อมต่อกับโฮสต์สุดท้าย%hที่พอร์ต%p(ทั้งสองจะถูกกรอกโดย SSH ตามข้อมูลใน~/.ssh/configไฟล์)
หากคุณต้องการระบุคีย์ที่กำหนดเองที่Bจะใช้คุณสามารถทำได้โดยการแก้ไขssh-addส่วน:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'