วิธีที่ 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 เป็นเพียงการแสดงการส่งออกของfinallocalssh 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) ในคำสั่งเรียกinternc 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ตรวจสอบว่าเป็นจริงที่มีอยู่บนncinter
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