ดี, วิธีการใช้ระบบตัวแทน SSH และไม่ขอรหัสผ่าน


19

ฉัน googled และอ่านคำถามที่พบบ่อยและ Wiki สำหรับ Magit แต่ก็ยังไม่สามารถหาคำตอบได้ทั้งหมดที่ฉันพบคือคำตอบเกี่ยวกับ Windows ...

ฉันจะกำหนดค่า Magit ให้ใช้เซสชัน ssh-agent ที่ทำงานอยู่ได้อย่างไรและไม่ต้องขอรหัสผ่านเมื่อทำการพุช

ฉันใช้ linux และมีการเริ่มต้น ssh-agent ด้วยเทอร์มินัลของฉันและปลดล็อคกุญแจของฉันแล้วซึ่งช่วยให้ฉันสามารถกด git ฯลฯ โดยไม่ต้องป้อนรหัสผ่านทุกครั้ง

Env:
Arch Linux
Emacs 24.4

ssh-agent พร้อมปุ่มเพิ่มเพื่อปลดล็อคเมื่อเปิดเทอร์มินัลแรก

แก้ไข:ฉันหมายถึงการใช้ข้อความรหัสผ่านคุณรู้สำหรับคีย์ ssh และอื่น ๆ
และฉันกำลังผลักดันไปยัง Bitbucket แต่ฉันเชื่อว่าปัญหาสำคัญคือ Magit ไม่ได้พูด / จำตัวแทนของฉัน
อาจจะมีการตั้งค่าบางอย่างที่จะบอกว่าฉันใช้มันได้หรือไม่


จริงๆแล้วมาพร้อมกับคำถามเดียวกัน
emacsomancer

URL ระยะไกลคืออะไร http: // หรือ git: //?
Nsukami _

git@bitbucket.org ในกรณีนี้ตั้งค่าดังนี้: url = git@bitbucket.org:
Andres

คุณสามารถบอกเราว่า Emacs จะกลับมาเมื่อคุณทำM-x getenv SSH_AGENT_PID? M-x getenv SSH_AUTH_SOCK
Nsukami _

SSH_AGENT_PID = 602 SSH_AUTH_SOCK = /tmp/ssh-13kI6AaYvgji/agent.601
Andres

คำตอบ:


13

นี่กลายเป็นหลุมกระต่ายมากกว่าที่ฉันคิดไว้ ... และสำหรับสิ่งที่ฉันสามารถรวบรวมได้นั้นไม่ใช่ทางออกที่ดีกว่าสำหรับปัญหาเฉพาะนี้ด้วยเดสก์ท็อป ssh-agent, emacs

ปัญหาที่ 1
XFCE กำลังเริ่มต้นเป็นเอเจนต์ ssh-agent ด้วยเซสชันโดยที่ไม่ต้องพูดอะไรเลยซึ่งทำให้ระบบมีเอเจนต์ ssh-agent ทั่วโลกที่ไม่ได้ใช้ 1 อันและเอเจนต์ปลดล็อกเชลล์เฉพาะของฉัน
ใน DE อื่นคุณอาจพบปัญหาเดียวกันและจะต้องค้นหาข้อมูลเฉพาะเพื่อปิดการใช้งาน Agent auto start

โซลูชันที่ 1
เรียกใช้คำสั่งนี้เพื่อปิดใช้งานการเริ่มต้น ssh-agent จากการดำเนินการ

xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false

ปัญหา 2
ตอนนี้ Emacs ไม่มีตัวแปรSSH_AGENT_PIDและSSH_AUTH_SOCKใด ๆดังนั้นจึงไม่มีสิ่งใดในสภาพแวดล้อมที่โหลด เห็นได้ชัดว่า Magit ยังคงถามหากุญแจเพราะมันไม่รู้เกี่ยวกับssh-agent ใหม่ที่เราเริ่มต้น

โซลูชันที่ 2
เราจำเป็นต้องให้ Emacs ดึงข้อมูลตัวแปรใหม่เหล่านี้จากสภาพแวดล้อม แต่แน่นอนว่าไม่มีวิธีการส่งตรง
ป้อน: exec-path-from-shellที่อนุญาตให้คุณดึงตัวแปรสภาพแวดล้อมจากเชลล์ของคุณ ดังนั้น.

  1. ติดตั้งแพ็กเกจexec-path-from-shellในแบบที่คุณต้องการ
  2. เพิ่มรหัสต่อไปนี้เพื่อinit.elของคุณเพื่อให้มันโหลดเมื่อคุณเริ่ม Emacs

(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")

ขอบคุณมากสำหรับคำแนะนำในการดูตัวแปร SSH _ ** นั่นชี้ให้ฉันเห็นทิศทางที่ถูกต้อง


มีเหตุผลใดที่คุณไม่พอใจกับตัวแทนของ XFCE และต้องการที่จะทำงานด้วยตัวเอง? การละทิ้งที่ดูเหมือนโซลูชันที่ง่ายกว่า
tripleee

ฉันไม่ได้เรียกใช้ XFCE เสมอไปหรือไม่สนใจวิธีการจัดการเดสก์ท็อปฉันชอบปลั๊กอินที่จัดการจาก oh-my-zsh ดังนั้นจึงง่ายสำหรับฉันที่จะข้ามกรณีการใช้งานเริ่มต้น (ให้ฉันไม่รู้เกือบพอเกี่ยวกับตัวแทน ... แต่ไม่ใช่สิ่งที่ฉันต้องการใช้เวลาคิดเกี่ยวกับอย่างไรก็ตาม)
Andres

บางที Zsh ควรจำกรณีเมื่อตัวแทนทำงานอยู่และเลื่อนไปที่เรื่องนั้นแทน แต่เห็นได้ชัดว่านี่กำลังปิดหัวข้อที่นี่
tripleee

1
บางทีเอเจนซี่ sshควรถูกขยายให้ทำงานบนระบบที่เหมือนยูนิกซ์ด้วย
npostavs

7

วิธีแก้ปัญหาสำหรับคนขี้เกียจก็คือใช้แพ็คเกจที่จัดการกับกรณีนี้อย่างแน่นอน (การตั้งค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับพวงกุญแจของ Emacs):

  1. ติดตั้งและเพิ่มแพคเกจ init.el คุณพวงกุญแจสิ่งแวดล้อม
  2. ทำงานM-x keychain-refresh-environmentและตอนนี้มันควรจะทำงาน
  3. วาง(keychain-refresh-environment)ใน init.el ของคุณดังนั้นวิธีแก้ปัญหาจะทำงานหลังจากรีสตาร์ท Emacs

และนั่นคือทั้งหมดสมมติว่า ssh-agent ของคุณได้รับการกำหนดค่าและทำงานอยู่

คำอธิบายที่ดีจริงๆจากความคิดเห็นของแพคเกจ:

Keychain เป็นสคริปต์ที่จัดการ ssh-agent และ gpg-agent โดยทั่วไปจะเรียกใช้จากไฟล์เริ่มต้นของเชลล์ อนุญาตให้งานเชลล์และ cron ของคุณแบ่งปัน ssh-agent และ / หรือ gpg-agent เดียว

เมื่อใช้งานพวงกุญแจมันจะตรวจสอบการทำงานของตัวแทนหรือไม่ก็เริ่มทำงาน มันบันทึกตัวแปรสภาพแวดล้อมของเอเจนต์ลงในไฟล์ภายใน ~ / .keychain / เพื่อให้เชลล์ที่ตามมาสามารถมาไฟล์เหล่านี้ได้

เมื่อ Emacs เริ่มต้นภายใต้ X11 และไม่ใช่โดยตรงจากเทอร์มินัลตัวแปรเหล่านี้จะไม่ถูกตั้งค่า ไลบรารีนี้ค้นหาไฟล์เหล่านี้ที่สร้างขึ้นโดย keychain และจากนั้นตั้งค่าตัวแปรสภาพแวดล้อมของ Emacs ตามลำดับ มันไม่ได้ใช้งานพวงกุญแจดังนั้นคุณยังต้องเรียกใช้จากเชลล์ล็อกอินก่อน

หากต้องการใช้งานให้เรียกใช้ฟังก์ชัน `keychain-refresh-environment 'ในไฟล์ init ของคุณ หากพวงกุญแจยังไม่ได้ทำงานเมื่อคุณเริ่ม Emacs คุณสามารถเรียกใช้ฟังก์ชั่นนั้นได้ในภายหลัง

ดูเพิ่มเติมที่: http://www.funtoo.org/wiki/Keychain


1
keychainนี่คือสิ่งที่ฉันต้องการตั้งแต่ผมใช้อยู่แล้ว
xji

1

FWIW keychainตอนนี้มี--systemdสวิตช์ซึ่งจะฉีดตัวแปรลงในสภาพแวดล้อมของผู้ใช้ systemd

วิธีที่ง่ายที่สุดที่ฉันพบคือการเพิ่มeval "$(keychain --eval --quiet --noask --systemd keys...)"สคริปต์ที่รันจากหน่วย systemd เพื่อเริ่มเซิร์ฟเวอร์ Emacs

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