บทความ Wikipediaอาจมีคำอธิบายที่ดีที่สุด:
การตรวจสอบไปยังเซิร์ฟเวอร์นั้นขึ้นอยู่กับการตรวจสอบการตอบสนองต่อความท้าทาย ssh เชื่อมต่อกับเซิร์ฟเวอร์ด้วยชื่อผู้ใช้และการร้องขอสำหรับคีย์ ssh daemon รับคำร้องขอและส่งการท้าทายกลับตามคีย์สาธารณะที่เก็บไว้ในไฟล์การพิสูจน์ตัวตน ssh ใช้ไพรเวตคีย์เพื่อสร้างการตอบรับคีย์และส่งไปที่รอ sshd ที่ปลายอีกด้านของการเชื่อมต่อ มันไม่ได้ส่งกุญแจส่วนตัวเอง ssh daemon ตรวจสอบความถูกต้องของการตอบกลับคีย์และถ้าถูกต้องจะให้สิทธิ์การเข้าถึงระบบ ssh-agent ลดความซับซ้อนนี้โดยการสร้างซ็อกเก็ตที่ฟังการเชื่อมต่อ SSH ผู้ใช้เริ่มต้นเอเจนต์ ssh โดยบอกวิธีการหากุญแจของพวกเขา (หากพวกเขาไม่ได้อยู่ในตำแหน่งเริ่มต้น) ให้ป้อนข้อความรหัสผ่านสำหรับแต่ละคีย์ที่จะใช้ในครั้งเดียว
คำต่อคำอีกครั้งจากบทความวิกิพีเดีย:
... ssh-agent สร้างซ็อกเก็ตแล้วตรวจสอบการเชื่อมต่อจาก ssh ทุกคนที่สามารถเชื่อมต่อกับซ็อกเก็ตนี้ยังมีการเข้าถึง ssh-agent การอนุญาตถูกตั้งค่าเหมือนในระบบ Linux หรือ Unix ปกติ เมื่อเอเจนต์เริ่มต้นมันจะสร้างไดเรกทอรีใหม่ใน / tmp ด้วยสิทธิ์ที่ จำกัด ซ็อกเก็ตตั้งอยู่ในโฟลเดอร์
โดยทั่วไปจะใส่ไว้ในระบบหรือไฟล์ rc ของผู้ใช้เช่น$HOME/.bashrc
หรือ$HOME/.profile
(สำหรับ bash shells) เพื่อให้ตัวแปรสภาพแวดล้อมssh-agent
ตั้งค่าถูกรวมเข้ากับสภาพแวดล้อมของคุณได้อย่างสมบูรณ์
ในระบบ Fedora 14 ของฉันมันเริ่มต้นค่อนข้างเร็วเนื่องจากเป็นส่วนหนึ่งของระบบย่อย X11 ในไฟล์นี้/etc/X11/xinit/xinitrc-common
:
# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
if [ "x$TMPDIR" != "x" ]; then
SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
else
SSH_AGENT="/usr/bin/ssh-agent"
fi
fi
ตัวแปร$SSH_AGENT
จะถูกใช้ในสคริปต์เริ่มต้น X11 อื่น ๆ เช่นที่นี่/etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
โดยการรวมเข้ากับที่นี่ตัวแปรสภาพแวดล้อมต่อไปนี้ได้รับการตั้งค่าเป็นส่วนหนึ่งของพาเรนต์เชลล์ดังนั้นเด็กที่แยกทั้งหมดควรมีเช่นกัน:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
มีความซับซ้อนมากกว่านี้เล็กน้อย แต่โดยสรุปนี่เป็นสิ่งที่เกิดขึ้นโดยssh-agent
ทั่วไป
ตัวอย่างเช่นใน GNOME ssh-agent
มีการเปิดตัวจริงต่อผู้ใช้หนึ่งรายเป็นแอปพลิเคชันเริ่มต้น:
TL; DR
บรรทัดล่างssh-agent
มีอยู่เพื่อให้เมื่อคุณต้องการคีย์ ssh คุณต้องปลดล็อคพวกเขาเพียงครั้งเดียวด้วยข้อความรหัสผ่านของพวกเขา (สมมติว่าพวกเขามีหนึ่ง) และจากนั้นพวกเขาก็มีอยู่ในรูปแบบถอดรหัสในหน่วยความจำ (RAM)