ssh-agent ไม่ได้รับการตั้งค่า (SSH_AUTH_SOCK, SSH_AGENT_PID ไม่ได้ตั้งค่า env vars)


13

ฉันตั้งค่าบัญชีผู้ใช้ใหม่สำหรับเพื่อนใน Kubuntu 12.04 เมื่อเขาใช้sshเขาได้รับข้อผิดพลาดนี้:

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

เรากำลังทำงานsshในสคริปต์ทุบตี

หลังจากดูสิ่งต่าง ๆ มากมายที่สามารถนำไปสู่ข้อผิดพลาดนั้นฉันได้พบกับวิธีแก้ไขปัญหานี้:

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

จากนั้นเขาสามารถเรียกใช้sshคำสั่ง (และสคริปต์ทุบตี) ตามที่คาดไว้

ก่อนรันสองคำสั่งตัวแปร env ไม่ได้ถูกตั้งค่าในเทอร์มินัล:

$ echo $SSH_AGENT_PID

$ echo $SSH_AUTH_SOCK

$ 

หลังจากรันคำสั่งตัวแปร env จะถูกตั้งค่าตามที่คาดไว้ อย่างไรก็ตามพวกเขาไม่ได้อยู่ที่การตั้งค่า (เช่นในเปลือกที่แตกต่างกันหรือหลังจากรีบูตเครื่อง)

ฉันต้องการทราบวิธีการตั้งค่าคอมพิวเตอร์ของเขาเพื่อที่เขาจะได้ไม่ต้องเรียกใช้ทั้งสองคำสั่งเพื่อตั้งค่าตัวแปร env ฉันไม่จำเป็นต้องเรียกใช้บนคอมพิวเตอร์ของฉัน (เคย) จนถึงตอนนี้ฉันไม่เห็นสิ่งที่แตกต่างระหว่างเครื่องของเรา

ฉันเห็นข้อมูลนี้ในหน้า man แต่ไม่ได้บอกฉันว่า Ubuntu ปกติตั้งค่าตัวแทนโดยอัตโนมัติหรือสิ่งที่เกิดขึ้นบนเครื่องของเพื่อนของฉันเพื่อที่จะไม่ทำงานสำหรับเขา

มีสองวิธีหลักในการตั้งค่าเอเจนต์: วิธีแรกคือเอเจนต์เริ่มคำสั่งย่อยใหม่ซึ่งตัวแปรสภาพแวดล้อมบางอย่างจะถูกส่งออกเช่น ssh-agent xterm & ประการที่สองคือเอเจนต์พิมพ์คำสั่งเชลล์ที่ต้องการ (สามารถสร้างไวยากรณ์ sh (1) หรือ csh (1) ได้) ซึ่งสามารถ evalled ในเชลล์ที่โทรได้เช่น eval ssh-agent -sสำหรับเชลล์ประเภท Bourne เช่น sh (1) หรือ ksh (1) และ eval ssh-agent -cสำหรับ csh (1) และอนุพันธ์

หลังจากติดตั้งacctและรีบูตนี่เป็นผลลัพธ์ของlastcomm:

ssh-agent         F    newuser __         0.12 secs Wed Aug  7 11:02
ssh-agent         F    newuser __         0.00 secs Wed Aug  7 20:34
ssh-agent         F    newuser __         0.02 secs Wed Aug  7 20:02
ssh-agent         F    newuser __         0.01 secs Thu Aug  8 12:39
ssh-agent         F    newuser __         0.02 secs Thu Aug  8 07:45

จากหน้าคน:

F - คำสั่งดำเนินการหลังจากทางแยก แต่ไม่มี exec ต่อไปนี้

ฉันไม่แน่ใจว่านั่นสำคัญหรือไม่


2
ภายใต้อูบุนตูจะเริ่มต้นจากการได้ตามปกติssh-agent /etc/X11/Xsession.d/90x11-common_ssh-agentนี้สามารถระงับโดยการลบจากuse-ssh-agent /etc/X11/Xsessionไฟล์เหล่านั้นถูกต้องหรือไม่ เอเจนต์เริ่มทำงานแล้วจึงฆ่าหรือไม่เริ่มเลย (ติดตั้งacctและเรียกใช้lastcommหลังจากเข้าสู่ระบบเพื่อดูว่าโปรแกรมใดถูก lauched)
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@ Gilles- ขอบคุณ ไฟล์สองไฟล์นั้นเหมือนกันในเครื่องของฉันและเครื่องของเขา เราทั้งสองมีและX11/Xsession.options:use-ssh-agent X11/Xsession.d/90x11-common_ssh-agent:SSHAGENT=/usr/bin/ssh-agentฉันจะลองacctและlastcommต่อไป ขอบคุณ
MountainX

อัปเดตคำถาม
MountainX

ยังคงมองหาวิธีแก้ปัญหา ...
MountainX

กรุณาโพสต์ผลลัพธ์ของlastcommสำหรับเซสชั่นเต็มรูปแบบไม่เพียง แต่ssh-agentกระบวนการ ประเด็นคือต้องดูว่าโปรแกรมต่าง ๆ เริ่มเรียงตามลำดับอย่างไร
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


0

คุณพูดถึงผู้ใช้ของคุณกำลังsshเข้าไม่เข้าสู่ระบบในเครื่อง ดังนั้นuse-ssh-agentin /etc/X11/Xsession.optionsคือปลาเฮอริ่งแดง: มันจะไม่ถูกประมวลผลในเซสชัน SSH เฉพาะเมื่อลงชื่อเข้าใช้เดสก์ท็อป X11 GUI ในพื้นที่ (หรือใช้เซสชัน X11 เสมือนบางตัวเช่น VNC หรือ RDP)

แต่คุณควรตรวจสอบว่าlibpam-sshมีการติดตั้งในทั้งสองระบบหรือไม่ สามารถกำหนดค่าให้รับรองความถูกต้องของผู้ใช้โดยใช้วลีรหัสผ่านส่วนตัวของ SSH แต่เป็นตัวเลือกและคุณจะต้องวางกุญแจไว้~/.ssh/login-keys.d/สำหรับการใช้งานนั้นโดยเฉพาะ

อย่างไรก็ตามคุณสมบัติอื่น ๆ ของมันคือการเริ่มต้นเอเจนต์ SSH โดยอัตโนมัติในเซสชันการล็อกอินใด ๆ และเพิ่มคีย์ส่วนตัว SSH ให้กับเอเจนต์หากข้อความรหัสผ่านของพวกเขาเหมือนกับรหัสผ่านการเข้าสู่ระบบของผู้ใช้ ฉันคิดว่านี่อาจเป็นสาเหตุของพฤติกรรมที่แตกต่างระหว่างระบบของคุณ


3

สำหรับการ

$ eval `ssh-agent -s`

สร้างเพื่อทำงานเมื่อใส่ใน“ สคริปต์เริ่มต้น”, เซสชันของคุณและท้ายที่สุดเทอร์มินัลที่คุณคาดหวังกับสภาพแวดล้อมจะต้องเป็นลูกหลาน (โดยforkและexec) ของสคริปต์นั้น เหตุผลก็คือว่าการส่งออกของssh-agent -sเมื่อประเมินกำหนดตัวแปรสภาพแวดล้อมในการโทรเปลือก evalแบบฟอร์มพวกเขาอาจถูกส่งลงมาและพวกเขาอาจหลงทางเช่นกัน

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

หากคุณssh-agentเริ่มต้นเป็นsystemd --userบริการแล้วคุณอาจต้องใช้การประชุมแทน: อย่าปล่อยให้ssh-agent ระบุตัวแปร แต่ใช้ความรู้ทั่วไปเมื่อเริ่มต้นตัวแทนและเมื่อเริ่มเซสชัน เช่นฉัน ~/.config/systemd/user/ssh-agent.serviceมีลักษณะเช่นนี้:

[Unit]
Description=SSH agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

และในฉัน~/.profileฉันมีสาย

export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

โปรดทราบว่า%tในอดีตที่สอดคล้องกับ${XDG_RUNTIME_DIR}ในหลัง

หมายเหตุ:ฉันไม่มีความสุขกับสิ่งนี้!


1

ฉันพบคำตอบที่นี่:

http://www.bernatchez.net/userauth.html

ในอูบุนตูยูทิลิตี ssh-add ไม่สามารถโหลดไฟล์ใบรับรองได้ มันเกิดขึ้นเมื่อตัวแทนเป็นหนึ่งที่ดำเนินการโดย gnome-keyring การแก้ไขคือการหยุดการใช้องค์ประกอบ ssh ของ gnome-keyring เนื่องจากกระบวนการเริ่มต้นเริ่มต้นขึ้นจริง ssh-agent และจากนั้นเปิดตัว gnome-keyring-ssh.desktop ซึ่งทำให้ AUTH_SOCKET ยึดครองเอาไว้เราสามารถเปลี่ยนกลับเป็น ssh-agent ดั้งเดิมได้โดยปิดการใช้งาน gnome-keyring-ssh.desktop

ปิดใช้งาน gnome-keyring-ssh.desktop:

cd /etc/xdg/autostart/
sudo emacs gnome-keyring-ssh.desktop

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์เดสก์ท็อปและบันทึกจากนั้นรีบูต:

X-GNOME-Autostart-enabled=false

0

คุณพูดถึงว่า

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

ทำงานได้ตามที่ต้องการ ดังนั้นคุณเพียงแค่ต้องการให้ดำเนินการในเวลาที่เหมาะสมใน. bash_profile หรือ. xsession เพิ่มคำสั่ง debug ที่(date; env|sort) >> /tmp/logจะช่วยให้คุณเข้าใจได้อย่างแน่นอนเมื่อพวกเขาทำงาน

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