ตรวจจับการส่งต่อตัวแทน SSH


19

ฉันจะทราบได้อย่างไรว่ามีการสร้างการเชื่อมต่อ SSH โดยมีหรือไม่มีตัวแทนการส่งต่อ

ฉันกำลังพยายามทำสิ่งต่อไปนี้:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

และเปรียบเทียบผลลัพธ์ แต่ฉันเห็นความแตกต่างเพียงเล็กน้อยเท่านั้น


1
สำหรับการอ้างอิงตรวจสอบบทความนี้ดี: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add มันชี้ให้คุณไปที่ repo GitHub ที่ดีด้วยssh-find-agentสคริปต์สำหรับการค้นหาและใช้ตัวแทน SSH ที่มีอยู่สะดวกมาก! repo มีตัวอย่างบางส่วนใน README คุณอาจสามารถตรวจพบว่ามีการเปิดใช้งาน ssh-agent เช่นนั้นพร้อมกับการตรวจสอบไฟล์กำหนดค่า SSH แทนที่จะดูที่เอาต์พุต SSH
trusktr

คำตอบ:


21

เมื่อเปิดใช้งานเอเจนต์ ssh ไปยังไคลเอนต์ ( ForwardAgent yesเปิด~/.ssh/config) และยังเปิดใช้งานบนเซิร์ฟเวอร์ระยะไกลAllowAgentForwarding yesเมื่อเข้าสู่เซิร์ฟเวอร์ระยะไกลตัวแปรสภาพแวดล้อมSSH_AUTH_SOCKควรมีอยู่ จากนั้นถ้าคุณเข้าสู่เซิร์ฟเวอร์อื่น (คุณต้องใช้รหัสสาธารณะต้องอยู่ในเซิร์ฟเวอร์ที่สามนี้) คุณไม่ควรได้รับพร้อมท์ให้ใส่รหัสผ่านใด ๆ

เพื่อชี้แจง:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$

1
นี่ssh-addคือสิ่งที่หลอกลวงสำหรับฉัน ฉันทำงานมาหลายเดือนโดยไม่รู้เรื่องนั้น จากนั้นฉันเปลี่ยนเดสก์ท็อปจาก Unity เป็น LXDE และการส่งต่อคีย์เอเจนต์หยุดทำงาน
Mark Hudson

@ MarkHudson ด้วยเหตุผลบางอย่างเมื่อเรียกใช้ LXDE คุณต้องเรียกใช้ssh-addทุกครั้งที่คุณเปิดหน้าต่างคอนโซลใหม่ ดังนั้นฉันจึงเพิ่มบรรทัดคำสั่งนั้นไปยังจุดสิ้นสุด~/.bash_profileและตอนนี้ตัวแทนการรับรองความถูกต้องการส่งต่อจะทำงานทุกครั้งอย่างโปร่งใส!
Paul Bernal

@ PaulBernal คุณไม่จำเป็นต้องทำเช่นนั้นจริงๆฉันคิดว่าคุณssh-agentตั้งค่าไม่ถูกต้อง ดูmah.everybody.org/docs/ssh
Michael Mrozek

1
m2c: ไฟล์ใน"${SSH_AUTH_SOCK}"ซ็อกเก็ตคุณสามารถทดสอบได้ด้วยif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop

4

การตรวจสอบสภาพแวดล้อมSSH_AUTH_SOCKนั้นดีสำหรับการเชื่อมต่อ ssh โดยตรง

หากคุณใช้พร็อกซี ( proxy_command) คุณอาจมีการเชื่อมโยงที่มีลักษณะดังนี้:

local-> hostA-> hostB-> hostC->hostD

หากการส่งต่อเอเจนต์ใช้งานได้บนโฮสต์เหล่านั้นทั้งหมดSSH_AUTH_SOCKจะถูกตั้งค่าและ "ประกอบด้วย" คีย์ ssh ของคุณจากlocalบนโฮสต์ทั้งหมด

ตอนนี้ส่งต่อตัวแทนสมมติว่ามีการปิดใช้งานบนแต่เปิดใช้งานบนhostB จะถูกตั้งค่าบนแต่จริง ๆ แล้วจะเป็น "ว่าง" แน่นอนตัวแทนจะถูกส่งต่อ แต่จากการ โซ่ขาดhostCSSH_AUTH_SOCKhostDhostChostD

ตอนนี้เพื่อตรวจสอบว่าจริง ๆ แล้วมีคีย์พร้อมใช้งานที่hostDคุณสามารถโทรssh-addได้ มันจะออกด้วยรหัส 1 ในกรณีใด ๆ แต่ถ้าคีย์ไม่สามารถใช้งานได้มันจะแสดงสิ่งนี้ในstderr:

ไม่สามารถเปิดการเชื่อมต่อกับตัวแทนการตรวจสอบความถูกต้องของคุณ

ดังนั้นคุณสามารถตรวจสอบเครื่องหมายSSH_AUTH_SOCKบวกทำให้แน่ใจว่าssh_addไม่มีเอาต์พุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.