ทำไมเอาท์พุตของ ssh-agent


67

ในการวิ่งssh-agentฉันต้องใช้

eval $(ssh-agent)

ทำไมฉันถึงต้องevalส่งออกของssh-agent?

ทำไมมันไม่ได้ออกแบบมาเพื่อที่ฉันจะสามารถเรียกใช้มันได้


หมายเหตุ: ลบ Backticks (`) ออกเนื่องจากถูกเลิกใช้แล้ว คุณสามารถอ่านเพิ่มเติมได้ที่นี่เช่น


ใครบอกว่าคุณต้องใช้ eval? สิ่งนี้คืออะไร บริบทเพิ่มเติมเล็กน้อยจะช่วย
0xSheepdog


9
@ 0x ติดตามดูmanหน้านี้เพื่อเริ่มต้น ...
jasonwryan

ดูเหมือนว่ากรณีการใช้งานถูกบันทึกไว้ในหน้าคน ในฐานะที่เป็น"ทำไมมันได้รับการออกแบบวิธีการบางอย่าง" ... ยัก
0xSheepdog

5
การทำซ้ำไม่ใช่ssh-agentว่า "ออกแบบแบบนี้" เป็น unix / linux เพราะssh-agentทำงานในกระบวนการลูกของเชลล์ กระบวนการลูกไม่สามารถปรับเปลี่ยนกระบวนการหลักได้ แต่ฟังก์ชั่นสามารถ: เพราะมันทำงานในกระบวนการปัจจุบัน ดังนั้นคุณสามารถเขียนฟังก์ชั่น: do_set_ssh_agent() { eval ตัวแทน ssh ; }และที่อาจจะเรียกง่าย ๆ $ do_set_ssh_agentว่า: แต่ "โปรแกรม" ไม่ได้ติดตั้ง (โดยทั่วไป) เป็น "ฟังก์ชั่น" ใน linux / unix; แต่โปรแกรมจะถูกติดตั้งเป็นไฟล์ซึ่งตามที่กล่าวไว้ให้เรียกใช้ในกระบวนการลูก (Sourcing สคริปต์เป็นข้อยกเว้น แต่ตัวแทน ssh เป็นไบนารี.)
ไมเคิล

คำตอบ:


79

ssh-agent ส่งออกตัวแปรสภาพแวดล้อมที่คุณต้องเชื่อมต่อกับมัน

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

โดยเรียกevalคุณโหลดตัวแปรเหล่านั้นทันทีในสภาพแวดล้อมของคุณ

ทำไมถึงssh-agentทำเช่นนั้นไม่ได้ ... สังเกตคำที่เลือก ไม่ใช่ "ไม่", " ไม่สามารถ " ใน Unix กระบวนการสามารถแก้ไขตัวแปรสภาพแวดล้อมของตนเองเท่านั้นและส่งต่อไปยัง children มันไม่สามารถปรับเปลี่ยนกระบวนการสิ่งแวดล้อมแม่เพราะระบบจะไม่ยอมให้มัน นี่คือการออกแบบความปลอดภัยขั้นพื้นฐานสวย

คุณสามารถหลีกเลี่ยงได้evalโดยใช้ssh-agent utilityตำแหน่งที่utilityเป็นเชลล์การเข้าสู่ระบบตัวจัดการหน้าต่างของคุณหรือสิ่งอื่นใดที่จำเป็นต้องมีการตั้งค่าตัวแปรสภาพแวดล้อม SSH นี่คือยังกล่าวถึงในคู่มือ


ขอบคุณที่อธิบายอย่างชัดเจนว่าเกิดอะไรขึ้นและฉันได้รับมา แต่ทำไมมันจึงออกแบบวิธีนั้นแทนที่จะออกแบบเพื่อให้มันทำงานโดยอัตโนมัติจะเพิ่มตัวแปรให้กับสภาพแวดล้อมหรือไม่ มันเพิ่มความยืดหยุ่นในการเรียงลำดับหรือไม่?
jx12345

4
@ jx12345 คุณสามารถได้รับรอบevalโดยใช้ssh-agent utilityที่utilityเป็นเปลือกเข้าสู่ระบบของคุณจัดการหน้าต่างของคุณหรือสิ่งที่สิ่งอื่น ๆ ที่จะต้องมีตัวแปรสภาพแวดล้อม SSH ที่กำหนด นี่คือยังกล่าวถึงในคู่มือ ไม่มียูทิลิตี้ภายนอกสามารถตั้งค่าตัวแปรในสภาพแวดล้อมการโทรได้
Kusalananda

@kusalananda ถูกต้อง; อย่าลังเลที่จะเพิ่มสิ่งนั้นเป็นการแก้ไข ฉันเข้านอนแล้วหรือฉันจะทำเอง
Shadur

5
@ jx12345 เพราะมันสามารถเพิ่มตัวแปรให้กับสภาพแวดล้อมของตัวเอง แต่ไม่สามารถเพิ่มตัวแปรให้กับสภาพแวดล้อมของเชลล์ได้เพราะไม่ใช่เชลล์ของคุณ
user253751

3
@ jx12345 เพื่อชี้แจง: ถ้าฉันสามารถเพิ่มหรือเปลี่ยนตัวแปร env ให้กับกระบวนการผู้ปกครองของฉันฉันอาจส่งผลกระทบต่อผู้ปกครองของผู้ปกครองและอื่น ๆ จนถึง PID 1 นี่เรียกว่า "การเพิ่มสิทธิพิเศษ" และเป็นสิ่งที่แย่มากจากการรักษาความปลอดภัย จุดยืน
Shadur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.