วิธีที่ 1 (ใช้ ssh-key บน inter)
หากคุณต้องการที่จะรักษากระแสการตรวจสอบ
local -- authenticate --> inter -- authenticate (ask password) --> final
สิ่งนี้ไม่สามารถทำได้ด้วย. ssh / config proxyhost
สิ่งที่คุณต้องการคือนามแฝงเปลือกทุบตี (ฉันหวังว่าคุณกำลังใช้ทุบตี)
ใน~/.bashrc
เพิ่มบรรทัดต่อไปนี้
alias ssh-final='ssh -t inter ssh user2@final.com'
ใน command prompt เพียงแค่พิมพ์ต่อไปนี้
ssh-final
final
~/.ssh/config
ไม่ใช้ส่วนใน
รายละเอียดการเชื่อมต่อ (1)
ssh -t inter ssh user2@final.com
สามารถดูได้ดังนี้
local# ssh inter
inter# ssh user2@final.com
local
เป็นเพียงการ "พูดคุย" inter
เพื่อ ไม่มีการเชื่อมต่อ SSH ตรงหรือทางอ้อมระหว่างเป็นและlocal
เป็นเพียงการแสดงการส่งออกของfinal
local
ssh user2@final.com
วิธีที่ 2 (ใช้ ssh-key บนโลคอล)
การพิสูจน์ตัวตนด้วยคีย์ ssh เดียวกัน
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
คัดลอกท้องถิ่น ~/.ssh/id_ras.pub
ไปยัง
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
รายละเอียดการเชื่อมต่อ (2)
ssh tunneling
ก่อนที่เราจะพูดถึงรายละเอียดของProxyCommand
ลองดูตัวอย่างต่อไปนี้
ขั้นตอนที่ 1 บนหน้าต่างเทอร์มินัล 1
local# ssh inter -L 2000:final.com:22
ขั้นตอนที่ 2 บนหน้าต่างเทอร์มินัล 2
local# ssh localhost -p 2000
ในเทอร์มินัล 1 อุโมงค์ถูกตั้งค่าระหว่างโลคัลพอร์ต 2000 และ final.com พอร์ต 22 สิ่งใดที่ส่งไปยังโลคัลพอร์ต 2000 จะถูกส่งต่อไปยังพอร์ต final.com พอร์ต 22 และในทางกลับกัน
ในเทอร์มินัล 2, ssh เชื่อมต่อกับโลคัลพอร์ต 2000 แต่จริงๆแล้วการสื่อสารกับ final.com พอร์ต 22 ซึ่งเป็น sshd
ด้วย tunneling ไคลเอ็นต์ ssh โลคัลในขั้นตอนที่ 2 เชื่อมต่อกับ final.com sshd โดยตรง
"output" ของโลคัลพอร์ต 2000 คือทราฟฟิก "raw" ssh daemon
การใช้งานทั่วไปของอุโมงค์ดังกล่าวคือการเข้าถึงเว็บเซิร์ฟเวอร์ภายในหรือเซิร์ฟเวอร์อีเมล ต่อไปนี้เป็นตัวอย่างสำหรับเว็บเซิร์ฟเวอร์
local# ssh inter -L 2000:final.com:80
ในเบราว์เซอร์ให้ใช้ URL ต่อไปนี้
http://localhost:2000
จุดสิ้นสุดสองจุดของอุโมงค์คือพอร์ตในเครื่อง 2000 และพอร์ต final.com 80
การจราจรเข้าและออกจากจุดสิ้นสุดของอุโมงค์ "ตามสภาพ" ให้เรียกว่าการจราจร "ดิบ"
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
ProxyCommand
ใช้มันอีกขั้นหนึ่ง มันข้ามขั้นตอนในการสร้างพอร์ตท้องถิ่นและเชื่อมต่อกับมัน
ลูกค้า ssh จะดำเนินการสิ่งที่เคยได้รับคำสั่งด้านหลังProxyCommand
และปฏิบัติต่อผลลัพธ์ของคำสั่งนั้นเป็นการรับส่งข้อมูล "ดิบ" กำลังถือไว้ที่จุดปลายโลคัลจากนั้นเริ่มการเชื่อมต่อ ssh กับมัน
ทำไมอีกอันหนึ่งถึงไม่ทำงาน
คำสั่งดังต่อไปนี้
ssh inter nc final.com 22
โดยทั่วไปหมายถึง (1) เชื่อมต่อไปinter
แล้ว (2) ในคำสั่งเรียกinter
nc final.com 22
nc - arbitrary TCP and UDP connections and listens
ดังนั้นnc final.com 22
จะเชื่อมต่อกับ final.com พอร์ต 22 พิมพ์ทราฟฟิกขาเข้าทั้งหมดไปยัง stdout และส่ง stdin ทั้งหมดไปยังอีกด้านหนึ่ง มันเป็น "อุโมงค์" ระหว่าง nc stdin / out และ final.com พอร์ต 22
เนื่องจากnc
ถูกรันภายในเซสชัน ssh stdout ทั้งหมดจะถูกส่งกลับไปยังไคลเอ็นต์ ssh เนื่องจากการรับส่งข้อมูล "ดิบ" และไคลเอ็นต์ ssh สามารถส่งทราฟฟิกไปที่ nc stdin ซึ่งจะจบลงที่ final.com พอร์ต 22
ผ่าน "tunnel" ด้านบนไคลเอ็นต์ในระบบ ssh จะเริ่มเซสชัน ssh ด้วยfinal.com
โดยตรง
คำสั่งดังต่อไปนี้
ssh -t inter ssh user2@final.com
ไม่ทำงานProxyCommand
เนื่องจากการรับส่งข้อมูลไม่ใช่ "ดิบ" จาก ssh daemon มันเป็น stdout ของที่ลูกค้า SSH ลูกค้าคุยกับลูกค้าหมายถึงไม่มีธุรกิจ
การรับรองความถูกต้องด้วย ssh-key ที่แตกต่างกัน (การกำหนดค่าดั้งเดิม OP)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
คัดลอกท้องถิ่น ~/.ssh/id_ras.pub
ไปยัง
/home/user1/.ssh/authorized_keys in `inter`
คัดลอกท้องถิ่น ~/.ssh/id_ras_2.pub
ไปยัง
/home/user2/.ssh/authorized_keys in `final`
ทั้งสองข้อข้างต้นจะเปิดใช้งานการใช้งานต่อไปนี้
local# ssh final
การตรวจสอบเพิ่มเติม
ใช้ verbose
local# ssh -v final
ที่ควรช่วยระบุปัญหา ssh
ตรวจสอบ
ProxcyCommand
จะรันบนnc
inter
ตรวจสอบว่าเป็นจริงที่มีอยู่บนnc
inter
local# ssh inter
inter# nc final.com 22
ตรวจสอบว่ามีการตั้งค่าคีย์ rsa อย่างถูกต้อง
หากต้องใช้คีย์ที่แตกต่างกันinter
และfinal
ควรมีไฟล์ต่อไปนี้ในเครื่องท้องถิ่น
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
เนื่องจากคุณสามารถ ssh ไปแล้วให้ตรวจสอบการตั้งค่าที่สำคัญเกี่ยวกับinter
final
จากเครื่องท้องถิ่นของคุณ
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
คุณควรเห็นเนื้อหาของที่id_rsa_2.pub
นั่น
ssh -t
แต่สิ่งที่ผมอยากจะทำคือว่าจำลองพฤติกรรมที่ฉันได้จากการใช้ใช้เพียงการกำหนดค่าในการssh -t
.ssh/config