Magit, cara menggunakan agen ssh sistem dan tidak meminta kata sandi

19

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 ??

Andres
sumber
Sebenarnya datang dengan pertanyaan yang sama.
emacsomancer
Apa itu url jarak jauh? http: // atau git: //?
Nsukami _
[email protected] dalam hal ini, setup seperti: url = [email protected]:
Andres
Bisakah Anda memberi tahu kami apa yang dikembalikan Emacs saat melakukannya 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

Jawaban:

13

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.

  1. Instal paket exec-path-from-shell dengan cara yang Anda inginkan.
  2. Tambahkan kode berikut ke init.el Anda sehingga kode tersebut dimuat saat Anda memulai Emacs.

(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.

Andres
sumber
Adakah alasan khusus Anda tidak puas dengan agen XFCE dan ingin menjalankannya sendiri? Meninggalkan itu akan tampak seperti solusi yang lebih sederhana.
tripleee
Saya tidak selalu menjalankan XFCE, saya juga tidak peduli bagaimana desktop mengaturnya, saya lebih suka plugin yang menanganinya dari oh-my-zsh. Jadi lebih mudah bagi saya untuk melewati use case standar. (Memang saya tidak tahu cukup banyak tentang agen ... tetapi bukan sesuatu yang saya ingin menghabiskan waktu memikirkannya)
Andres
Mungkin Zsh harus mengenali kasus ketika agen sudah berjalan, dan menundanya untuk itu; tapi jelas, ini di luar topik di sini.
tripleee
1
Mungkin ssh-agency harus diperluas untuk bekerja pada sistem seperti unix juga.
npostavs
7

Solusi lain untuk malas adalah dengan hanya menggunakan paket yang menangani persis kasus ini (pengaturan variabel lingkungan terkait-gantungan kunci Emacs):

  1. Instal dan tambahkan ke lingkungan gantungan kunci paket init.el Anda .
  2. Jalankan M-x keychain-refresh-environmentdan sekarang ini akan berfungsi.
  3. Tempatkan (keychain-refresh-environment)di init.el Anda, sehingga solusinya bekerja setelah me-restart Emacs

Dan itu saja, dengan asumsi ssh-agent Anda sudah dikonfigurasi dan berjalan.

Deskripsi yang sangat bagus, dari komentar paket:

Keychain adalah skrip yang mengelola ssh-agent dan gpg-agent. Biasanya dijalankan dari file inisialisasi shell. Hal ini memungkinkan cangkang Anda dan pekerjaan cron untuk berbagi satu ssh-agent dan / atau gpg-agent.

Ketika gantungan kunci dijalankan, ia memeriksa agen yang menjalankan, jika tidak maka mulai mereka. Ini menyimpan variabel lingkungan agen ke file di dalam ~ / .keychain /, sehingga shell selanjutnya dapat sumber file-file ini.

Ketika Emacs dimulai di bawah X11 dan tidak langsung dari terminal, variabel-variabel ini tidak ditetapkan. Pustaka ini mencari file-file ini yang dibuat oleh gantungan kunci dan kemudian mengatur variabel lingkungan Emacs sesuai. Ini sebenarnya tidak menjalankan gantungan kunci, jadi Anda masih harus menjalankannya dari shell login terlebih dahulu.

Untuk menggunakan jalankan fungsi `keychain-refresh-environment 'di file init Anda. Jika gantungan kunci belum dijalankan saat Anda memulai Emacs, Anda juga dapat memanggil fungsi itu nanti secara interaktif.

Lihat juga: http://www.funtoo.org/wiki/Keychain

tlegutko
sumber
1
Ini persis apa yang saya butuhkan karena saya sudah menggunakan keychain.
xji
1

FWIW, keychainsekarang memiliki --systemdsaklar, 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.

Vladimir Panteleev
sumber