นี่เป็นปัญหาที่ฉันมีมาเป็นเวลานาน แต่ทุกครั้งที่ฉันพยายามคิดอะไรบางอย่างที่ฉันหลงทางดังนั้นฉันจึงคิดว่าฉันควรถามที่นี่ว่าอาจมีใครบางคนที่มีประสบการณ์มากกว่าสามารถช่วยฉันได้
พื้นหลัง
Raspberry Pi ของฉันใช้ Raspbian Jessie และฉันใช้ SSH บ่อยครั้งเพื่อเข้าสู่ระบบและรันคำสั่งจากระยะไกล ในระหว่างช่วง SSH ครั้งแรกของฉันฉันสังเกตเห็นว่าssh-agent
กระบวนการเกิดขึ้นที่ RPiทุกครั้งที่ฉันเข้าสู่ระบบ แต่ไม่เคยถูกฆ่าตายเมื่อexit
เข้า: เข้าสู่ระบบออกหลายครั้งทำให้ssh-agent
กระบวนการหลายอย่างเกิดขึ้นโดยไม่ต้องทำอะไรเลย เล่นไปรอบ ๆ และอ่านหน้าคนและคำตอบที่นี่และที่นั่นฉันเพิ่งเข้าใจวัตถุประสงค์ของการssh-agent
และฉันก็รู้ว่ามันควรจะถูกฆ่าตามปกติเมื่อออกจากระบบดังนั้นฉันเริ่มถามตัวเองว่าทำไมมันไม่ นอกจากนี้ฉันสังเกตเห็นว่าการออกตัวsource ~/.bashrc
ทำให้เกิดอีกตัวอย่างของssh-agent
การเกิด ฉันอ่านหน้าญาติSSH_AGENT_PID
ควรกำหนดตัวแปรสภาพแวดล้อมเนื่องจากssh-agent
โปรแกรมควรเริ่มทำงานภายในeval
เพื่อประมวลผลเอาต์พุตและกำหนดตัวแปรดังกล่าวซึ่งจะถูกใช้โดยคำสั่งที่เกี่ยวข้องกับ SSH อื่น ๆ รวมถึงssh-agent -k
(เพื่อฆ่าเอเจนต์ที่สัมพันธ์กับเซสชันปัจจุบัน) ดังนั้นฉัน วิ่งecho $SSH_AGENT_PID
และecho $SSH_AUTH_SOCK
แต่ทั้งคู่ก็ว่างเปล่า ฉันรู้ทันที: อาจเป็นไปได้ว่ากระบวนการไม่ได้หยุดทำงานเมื่อออกจากระบบเนื่องจากssh-agent -k
พยายามอ่าน PID จากตัวแปรสภาพแวดล้อมที่ไม่ได้ตั้งค่า
ปัญหา
เนื่องจากssh-agent
ไม่ได้ถูกฆ่าตายในการออกจากระบบและนี้เพื่อตรวจสอบว่าเกิดขึ้นเพราะตัวแปรสภาพแวดล้อมที่จำเป็นไม่ได้ตั้งค่าก็สามารถสิ่งหนึ่งเท่านั้นเฉลี่ย: ใครก็ตามที่เรียกร้องssh-agent
ในการเข้าสู่ระบบอาจจะไม่ได้ทำมันในทางที่เหมาะสม (ซึ่งจะเป็นeval "$(ssh-agent -s)"
) ดังนั้นฉันคิดว่า: ดีปัญหาคืออะไร? ฉันจะค้นหาไฟล์การกำหนดค่าบริการหรือสคริปต์การเข้าสู่ระบบใด ๆ ที่ได้รับการดำเนินการเพื่อเริ่มตัวแทนและแก้ไขด้วยตนเอง! มันจะอยู่ที่ไหนในโลก?
สิ่งที่ฉันได้ลอง
เนื่องจากฉันสังเกตว่ามีการssh-agent
วางไข่ทุกครั้งที่ฉันเรียกsource ~/.bashrc
ไฟล์นี้เป็นไฟล์แรกที่ฉันตรวจสอบ แต่ไม่มีอะไรที่อ้างอิงถึงสิ่งที่เกี่ยวข้องกับ SSH จากระยะไกล ฉันค้นหาโดยใช้vi
สตริงssh
ในไฟล์ต่อไปนี้ทั้งหมด แต่ไม่พบอะไรเลย :
~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment
มีไฟล์เพิ่มเติมอีกบ้างที่สามารถมีส่วนร่วมในsource ~/.bashrc
? ฉันไม่รู้จริงๆ
จากนั้นฉันค้นหาsystemd
บริการที่เกี่ยวข้องแต่พบเฉพาะssh.service
ซึ่งก็คือWantedBy=multi-user.target
และดังนั้นจึงไม่ได้ทำงานในการเข้าสู่ระบบ (และดีที่เห็นได้ชัดเพราะนี่คือภูตเซิร์ฟเวอร์ SSH)
ฉันพยายามย้ายไฟล์ทุกไฟล์ใน/home/pi
โฟลเดอร์ของฉันไปยังโฟลเดอร์ชั่วคราวและออกจากระบบแล้วกลับเข้ามาอีกครั้ง แต่ssh-agent
ก็ยังกลับกลายเป็น
ในที่สุดฉันก็ยิงช็อตสุดท้ายที่ฉันมีอยู่ในห้อง: ฉันวิ่งfind / -name 'ssh-agent'
ตามรูทซึ่งพิมพ์ได้เฉพาะ/usr/bin/ssh-agent
ไฟล์ปฏิบัติการดังนั้นฉันจึงสร้างไฟล์ปฏิบัติการปลอมซึ่งโดยพื้นฐานแล้วจะบันทึกคำสั่งหลักเท่านั้น :
#! /bin/bash
ps -o args= $PPID > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG
ฉันเปลี่ยนชื่อของจริง/usr/bin/ssh-agent
และแทนที่ด้วยของปลอมที่ตั้งค่าสิทธิ์ / ผู้ใช้ / กลุ่มที่ถูกต้องวิ่งsource ~/.bashrc
อีกครั้งจากนั้นพิมพ์LOG
ไฟล์:
-bash
-bash
ไม่ใช่เงื่อนงำเดียวกับสิ่งที่เกิดขึ้น
รายละเอียดเพิ่มเติมบางส่วน
ฉันกำลังเพิ่มรายละเอียดเพิ่มเติมฉันไม่รู้ว่าพวกเขาจะมีประโยชน์หรือไม่ แต่คุณรู้ว่า ... ปลอดภัยกว่าขออภัย
.bashrc
ต่อไปนี้เป็นของฉันฉันสร้างผู้ใช้ใหม่
dummy
โดยใช้ชื่อuseradd -m dummy
และการเข้าสู่ระบบไม่ได้เริ่มเลยssh-agent
(ฉันรู้สึกว่านี่อาจหมายถึงบางสิ่ง)diff /home/pi/.bashrc /home/dummy/.bashrc
แสดงให้เห็นโดยทั่วไปไม่มีอะไร (เพียงความคิดเห็นที่ฉันทำ)diff /home/pi/.profile /home/dummy/.profile
เหมือนกันสำหรับซ็อกเก็ตตัวแทนถูกสร้างโดยไม่มีปัญหาแม้ว่า
SSH_AUTH_SOCK
จะไม่ได้ตั้งค่า:pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/ total 0 srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
ไม่แน่ใจว่าทำไม แต่จำนวนในชื่อไฟล์ซ็อกเก็ตมักจะเป็นหนึ่งเสมอก่อน PID ของ
ssh-agent
กระบวนการตัวอย่างจาก
htop
:PID USER PRI NI VIRT RES SHR S Command 1 root 20 0 5472 3900 2728 S /sbin/init 1329 pi 20 0 3696 224 16 S └─ ssh-agent -s
ติดตั้งแพ็คเกจที่ตรงกัน
ssh
:pi:~$ apt list --installed | grep ssh libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed] libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic] libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic] openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed] sshpass/oldstable,now 1.05-1 armhf [installed]
กำลังหา
ssh-agent -s
ซ้ำใช้grep
ใน/etc
และ/lib
อัตราผลตอบแทนไม่มีผลลัพธ์ฉันไม่ได้ติดตั้งสภาพแวดล้อมเดสก์ทอป แต่มี
/etc/X11
โฟลเดอร์ที่มีไฟล์การกำหนดค่าอยู่ ฉันพยายามเปลี่ยนชื่อโฟลเดอร์เป็นอย่างอื่นและรีบูตเครื่องในกรณีที่ แต่กระบวนการยังคงได้รับกลับกลายดังนั้นดูเหมือนจะไม่เกี่ยวข้องกับสิ่งนี้มากนัก
ข้อสรุป
ตอนนี้เพื่อให้ง่ายที่สุดฉันมีเพียงสองคำถาม:
- สิ่งนี้
ssh-agent
เกิดที่ไหนและอย่างไรใครเป็นผู้ออกคำสั่ง? - ทำไมมันไม่ถูกเรียกในวิธีที่เหมาะสมโดยไม่ต้องตั้งค่าตัวแปรสภาพแวดล้อมที่จำเป็นดังนั้นจึงปล่อยให้กระบวนการหยุดทำงานที่นั่นอย่างไม่มีกำหนด?
~/.bashrc
ตอนนั้น