ฉันจะแก้ปัญหาตัวแทน SSH นี้ได้อย่างไร


17

ฉันใช้ Linux Mint และไม่สามารถรับ gnome-keyring เพื่อปลดล็อกโดยอัตโนมัติเมื่อเข้าสู่ระบบดูเหมือนว่า

อาการของปัญหาของฉันเป็นดังนี้:

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

ฉันจะทำให้มันเป็น git ที่สามารถผลัก / ดึงโดยไม่ต้องใส่ข้อความรหัสผ่านจากฉันได้อย่างไร

ฉันรู้ว่ามีหลายสิ่งที่นี่กับ gnome-keyring และ ssh-agent แต่ไม่สามารถตอกมันลงได้

การทำงานssh-addในระหว่างเซสชันหมายความว่าฉันจะไม่ขอรหัสผ่านของฉันอีกต่อไปสำหรับ SSH / git

ปัญหาคือฉันจะต้องทำงานssh-addในแต่ละเซสชั่น - ฉันต้องพลาดวิธีปลดล็อคกุญแจของ Gnome เมื่อเข้าสู่ระบบ

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

มันเกิดขึ้นอีกครั้งในช่วงเวลาเดียวกันกับการแก้ไขครั้งแรก ฉันไม่ได้และได้git pullWARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager

1
คุณสามารถเรียกใช้export | grep GNOMEและโพสต์ผลลัพธ์ คุณเคยเห็นข้อผิดพลาดนี้หรือไม่?
didster

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

อาจเป็นไปได้ว่าคุณมีเอเจนต์อื่นที่ไม่ใช่ gnome-keyring กำลังทำงานอยู่ สิ่งที่เกี่ยวกับenv | grep SSHและps -fp $SSH_AGENT_PID
Stéphane Chazelas

@StephaneChazelas ฉันได้เพิ่มสิ่งที่คุณแนะนำแล้วขอบคุณ ใช่ฉันได้สร้างชีวิตที่ซับซ้อนด้วยzshและtmuxทำงาน (เพียงพูดถึงเรื่องนั้น)
eoinoc

คำตอบ:


2

สิ่งที่จะเกิดขึ้นคือ:

คุณเริ่มเซสชัน gnome ซึ่งเป็นส่วนหนึ่งของ gnome-keyring daemon (ซึ่งทำหน้าที่เป็นตัวแทนของ ssh) และสภาพแวดล้อมของสิ่งที่เริ่มในระหว่างเซสชัน gnome นั้นจะได้รับการอัปเดตด้วยข้อมูลเกี่ยวกับวิธีติดต่อตัวแทน ssh นั้น รหัสผ่านที่คุณออกเมื่อเข้าสู่ระบบกราฟิกจะใช้ในการปลดล็อคพวงกุญแจเริ่มต้น

เมื่อคุณใช้ gnome-พวงกุญแจเป็นตัวแทน ssh ssh-agentคุณไม่ต้องการที่จะใช้ตัวแทนอื่นเช่น

เมื่อเซสชั่น X สิ้นสุดลงดังนั้น gnome-keyring แต่เซสชัน tmux ของคุณยังคงอยู่ จากนั้นแม้ว่าคุณจะเริ่มต้น gnome-keyring หรือ ssh-agent อีกครั้งสภาพแวดล้อมของกระบวนการที่เริ่มต้นแล้วtmuxจะไม่สามารถพูดคุยกับมันจนกว่าคุณจะอัปเดตสภาพแวดล้อมด้วยพา ธ ของซ็อกเก็ตใหม่

สิ่งที่คุณสามารถทำได้คือ:

gnome-keyring-daemon -r > ~/.gkr

และทำ. ~/.gkrในเชลล์ทั้งหมดที่คุณต้องการใช้ gnome-keyring ใหม่

ระวังว่า DISPLAY ที่ gnome-keyring-daemon กำลังเชื่อมต่ออยู่


คุณหมายถึงสิ่งนี้มีไว้สำหรับเมื่อเซสชัน X ของฉันสิ้นสุดลงหรือกล่าวอีกนัยหนึ่งเมื่อใดก็ตามที่ฉันออกจากระบบและกลับเข้าสู่ระบบอีกครั้ง? ฉันไม่มี.gkrฉันควร? ฉันจะระวังหน้าจอที่gnome-keyring-daemonจะเชื่อมต่อได้อย่างไร
eoinoc

2

สิ่งแรกที่ฉันจะลองก็คือapt-get install ssh-askpass-gnomeถ้าไม่ได้ติดตั้งแพ็กเกจนั้น (หรือมีโปรแกรม Askpass สำรอง) ติดตั้งอยู่ดังนั้น gnome ไม่สามารถขอให้คุณใส่รหัสผ่านเมื่อคุณจำเป็นต้องปลดล็อคกุญแจ

คุณจะต้องDISPLAYตั้งค่าตัวแปรให้เหมาะสม:

$ echo $DISPLAY
:0.0

นอกจากนี้คุณจะเริ่มต้นเทอร์มินัลของคุณอย่างไร? gnome-sessionอาจจะมีปัญหากับวิธีการที่คุณจะเริ่มต้นในเซสชั่นและขั้วหรือไม่ก็สืบทอดมาจาก สิ่งนี้สามารถเกิดขึ้นได้เมื่อคุณใช้โปรแกรม gnon-gnome เพื่อตั้งค่าการเชื่อมโยงคีย์ของคุณ

ทะนงคุณใช้คุณสามารถตรวจสอบการใช้gnome-terminal pstreeที่นี่คุณสามารถเห็นการสืบทอดที่ถูกต้องเกิดขึ้น:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

ในขณะที่เซสชันนี้ไม่มีการสืบทอดจากgnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

ตรวจสอบด้วยว่าssh-agentเริ่มต้นด้วยgnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)

มันซับซ้อนเล็กน้อยเกี่ยวกับสิ่งที่เทอร์มินัลที่ฉันใช้ (ความผิดของตัวเอง!) คำสั่งเรียกใช้งานของเทอร์มินัลของฉันคือmate-terminal --maximize -e tmux(ซึ่งฉันถือว่าเป็นคำสั่ง gnome-terminal) นอกจากนี้จะเต็มไปแล้วภายในzsh ติดตั้งแล้ว มีผลลัพธ์ที่คาดหวัง เป็นมรดกที่จะนั่งอยู่ใต้กับ mension ไม่ ในสาขาที่แยกจากกันมัน เพื่อที่จะตอบคำถามสุดท้ายของคุณออกเป็น: คุณคิดอย่างไร? ขอบคุณ tmuxssh-askpass-gnome$DISPLAYtmuxmate-terminalgnome-sessiontmux───zsh───xargs───pstreeinit───mdm───mdm───x-session-manag───ssh-agent
eoinoc

ทึกทักเอาเองว่าคุณใช้ gnome (และฉันคิดว่ามิ้นทำตามค่าเริ่มต้นดังนั้นถ้าคุณไม่เปลี่ยนมันจากค่าเริ่มต้น?) ฉันคิดว่าคุณไม่ได้mate-terminalรับมรดกมาจากgnome-sessionปัญหานี้ สองคำถาม: 1) ผลลัพธ์คืออะไรpgrep -fl gnome-sessionและ; 2) คุณใช้การดำเนินการใดเพื่อเรียกใช้เทอร์มินัลของคุณ จากเมนู? จากการเชื่อมโยงคีย์ลัด? หรือ ????
aculich

ใช่ฉันอยู่ใน Gnome 1) เอาต์พุตว่างเปล่า 2) น่าสนใจมาก Ctrl+Alt+tฉันมักจะทำ เป็นทางลัดที่ฉันตั้งค่าโดยใช้แอปพลิเคชัน Linux Mint Keyboard Shortcutsโดยใช้คำสั่งที่ฉันกล่าวถึงก่อนหน้านี้ แต่เมื่อเปิดตัวTerminalผ่านหลักเมนู "Start" จุ๊ทำหน้าที่แตกต่างกัน Gnome GUI แจ้งเตือนให้ฉันใส่รหัสผ่านในพวงกุญแจ ตัวเลือกในการบันทึกข้อความรหัสผ่านนี้สำหรับการประชุมในภายหลังนั้นเป็นสีเทาฉันไม่สามารถเลือกได้ (คำสั่งตัวเรียกใช้เมนูก็เช่นmate-terminal --maximize -e tmuxกัน) นั่นทำให้เราใกล้ชิดขึ้นหรือไม่? ขอบคุณ aculich
eoinoc

หากคุณเห็นพฤติกรรมแปลก ๆ ตามCtrl+Alt+tที่คุณตั้งไว้ในแป้นพิมพ์ลัดแล้วฉันคิดว่าคุณอาจพบข้อผิดพลาดใน mdm / MATE Mint เวอร์ชันใดที่คุณใช้อยู่
aculich

ฉันเป็นรุ่นหนึ่งที่อยู่เบื้องหลังบน Linux Mint 13 แต่สำหรับเทอร์มินัลเข้าถึงเมนูทำไมมันยังไม่ให้ฉันเลือก "บันทึกข้อความรหัสผ่านนี้ทุกครั้งที่ฉันลงชื่อเข้าใช้"
eoinoc

1

ฉันคิดว่ามีปัญหาในการจัดเก็บคีย์ SSH ที่ป้องกันด้วยรหัสผ่านอย่างถาวร

โปรดดูที่แหล่งข้อมูลต่อไปนี้:


ฉันจะแสดงความคิดเห็นในขณะที่ฉันไป ด้วยลิงก์แรกฉันเพิ่ม "IdentityFile ~ / .ssh / id_rsa" ไป~/.ssh/configแต่นั่นก็ไม่ได้แก้ไข
eoinoc

ลิงค์ที่สามแสดงการตั้งค่าพื้นฐานซึ่งดูเหมือนจะไม่ไปไกลกว่าที่ฉันเคยทำ ขอบคุณ
eoinoc

-1

เพิ่มสิ่งนี้ลงใน. bash_profile ของคุณ

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi

ขอบคุณมาร์ค ด้วยวิธีนี้มีค่า$SSH_AUTH_SOCK /tmp/ssh-QCndYkdq2025/agent.2025ฉันพลาดอะไรไปรึเปล่า? $git pullยังคงแสดงพรอมต์ข้อความรหัสผ่าน SSH
eoinoc

ตรวจสอบสิทธิ์ของคุณในไฟล์. ssh / authorized_keys ของคุณบนเซิร์ฟเวอร์ ควรเป็นเวลา 0600

บนเซิร์ฟเวอร์หรือไม่ GitHub เป็นเซิร์ฟเวอร์ภายนอกและคีย์ SSH ของฉันถูกบันทึกไว้ที่นั่น นี่ไม่ใช่ปัญหาท้องถิ่นอีกแล้วใช่ไหม
eoinoc

ขออภัยไม่ทราบว่าคุณกำลังใช้ GitHub ใช่คุณไม่สามารถควบคุมโฮสต์นั้นได้ คุณสามารถเพิ่มหลายคีย์ใน ssh-agent ของคุณและทำการทดลอง sshing ไปยัง localhost เพื่อให้แน่ใจว่าคุณสามารถตรวจสอบได้อย่างถูกต้อง นอกจากนี้คุณสามารถลองใช้ ssh -vvv user @ host และดูว่ามีอะไรแตก
Mark Cohen

ระบบลีนุกซ์บนเดสก์ท็อปส่วนใหญ่ (รวมมิ้นท์) จัดการssh-agentอย่างถูกต้องเมื่อเข้าสู่ระบบทันทีและมันมักจะเป็นของคุณเองเช่นนี้ที่ทำลายมัน หากระบบของคุณไม่สามารถจัดการได้ด้วยเหตุผลบางอย่างssh-agentอย่าทำด้วยมือ แทนที่จะใช้พวงกุญแจที่ออกแบบมาอย่างดีเพื่อจัดการกับปัญหานี้และที่เกี่ยวข้อง นอกจากนี้ยังใช้งานได้กับ BSD (Mac) และระบบอื่น ๆ ที่ไม่ใช่ Linux
aculich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.