Saya telah googled dan membaca FAQ dan Wiki untuk Magit, tetapi masih belum dapat menemukan jawabannya, yang saya temukan hanyalah jawaban tentang Windows ...
Bagaimana saya bisa mengkonfigurasi Magit untuk menggunakan sesi ssh-agent saya yang sedang berjalan dan tidak meminta kata sandi saya ketika melakukan push.
Saya menjalankan linux, dan memiliki startup ssh-agent dengan terminal saya dan membuka kunci saya kemudian, yang memungkinkan saya untuk melakukan git push, dll. Tanpa meminta saya memasukkan kata sandi setiap kali.
Env:
Arch Linux
Emacs 24.4
ssh-agent dengan kunci ditambahkan, untuk membuka kunci pada terminal pertama dibuka.
EDIT: Maksud saya menggunakan frasa sandi, Anda tahu untuk kunci ssh, et al.
Dan saya mendorong ke Bitbucket, tapi saya yakin masalahnya adalah Magit tidak berbicara / mengenali ssh-agent saya.
Mungkin ada beberapa konfigurasi untuk ditetapkan, untuk mengatakan bahwa saya menjalankannya ??
M-x getenv SSH_AGENT_PID
?M-x getenv SSH_AUTH_SOCK
Jawaban:
Nah ini ternyata lebih dari lubang kelinci daripada saya ... Dan untuk apa yang saya dapat kumpulkan tidak ada solusi yang lebih baik untuk masalah khusus ini, dengan kombinasi desktop, ssh-agent, emacs.
Masalah 1
XFCE memulai sendiri ssh-agent dengan sesi, tanpa benar-benar mengatakannya di mana saja, yang menyebabkan sistem memiliki 1 ssh-agent global yang tidak digunakan, dan agen tidak terkunci khusus shell saya.
Pada DE berbeda Anda mungkin menjalankan dengan masalah yang sama, dan akan perlu menemukan spesifik untuk menonaktifkan agen mulai otomatis.
Solusi 1
Jalankan perintah ini untuk menonaktifkan startup ssh-agent dari mengeksekusi
xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
Masalah 2
Sekarang Emacs tidak memiliki variabel SSH_AGENT_PID dan SSH_AUTH_SOCK yang ditetapkan, jadi tidak ada apa pun di lingkungan yang dimuat. Jelas Magit masih meminta kunci karena tidak tahu tentang ssh-agent baru yang kita mulai.
Solusi 2
Kita perlu Emacs mengambil variabel-variabel baru dari lingkungan, tetapi tentu saja, tidak ada jalan lurus ke depan.
Masukkan: exec-path-from-shell yang memungkinkan Anda untuk mengambil variabel lingkungan dari shell Anda. Begitu.
(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")
Terima kasih teman-teman untuk saran tentang melihat variabel SSH _ **, yang mengarahkan saya ke arah yang benar.
sumber
Solusi lain untuk malas adalah dengan hanya menggunakan paket yang menangani persis kasus ini (pengaturan variabel lingkungan terkait-gantungan kunci Emacs):
M-x keychain-refresh-environment
dan sekarang ini akan berfungsi.(keychain-refresh-environment)
di init.el Anda, sehingga solusinya bekerja setelah me-restart EmacsDan itu saja, dengan asumsi ssh-agent Anda sudah dikonfigurasi dan berjalan.
Deskripsi yang sangat bagus, dari komentar paket:
sumber
keychain
.FWIW,
keychain
sekarang memiliki--systemd
saklar, yang akan menyuntikkan variabel ke lingkungan pengguna systemd.Solusi paling sederhana yang saya temukan adalah menambahkan
eval "$(keychain --eval --quiet --noask --systemd keys...)"
skrip yang dijalankan dari unit systemd untuk memulai server Emacs.sumber