Magit, sistemin ssh aracısını nasıl kullanacağımı ve şifre sorma


19

Googled ve Magit için SSS ve Wiki'yi okudum, ancak yine de bunu anlayamıyorum, tüm bulduğum Windows ile ilgili cevaplar ...

Magit'i çalışan ssh-agent oturumumu kullanacak şekilde nasıl yapılandırabilirim ve bir itme yaparken şifremi istemem.

Linux'u çalıştırıyorum ve ssh-agent'ı terminalimle açıp anahtarımı açıyorum, o zaman git push, vb. Yapmamı sağlıyor.

Zarf:
Arch Linux
Emacs 24.4

İlk terminalde kilidi açmak için anahtarlar eklenmiş ssh-agent.

EDIT: Ben parola kullanmak istedim, biliyorsun ssh anahtar, et al.
Ve Bitbucket'e bastırıyorum, ancak asıl sorunun Magit'in ssh-ajanımı konuşmaması / tanımaması olduğuna inanıyorum.
Belki onu çalıştırdığımı söylemek için ayarlanacak bazı yapılandırmalar var ??


Aslında aynı soru ile geldi.
emacsomancer

Uzak URL nedir? http: // veya git: //?
Nsukami _

git@bitbucket.org bu durumda, şu şekilde kurulum yapın: url = git@bitbucket.org:
Andres

Emacs'ın ne zaman döndüğünü söyleyebilir misin 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

Yanıtlar:


13

Bu, benden daha fazla bir tavşan deliği olduğu ortaya çıktı ... Ve toplayabildiğim şey için, bu masaüstü, ssh-agent, emacs kombinasyonuyla bu özel sorun için daha iyi bir çözüm yok.

Sorun 1
XFCE, oturumla kendi ssh-ajanını başlattı, aslında hiçbir yerde söylemedi, bu da sistemin 1 kullanılmamış global ssh-ajanı ve kabuk özel kilidi açılmış ajanım olmasına neden oldu.
Farklı bir DE'de aynı sorunla çalışabilirsiniz ve aracı otomatik başlatmayı devre dışı bırakmak için özellikleri bulmanız gerekir.

Çözüm 1
Başlangıç ​​ssh-agent'ının yürütülmesini devre dışı bırakmak için bu komutu çalıştırın

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

Sorun 2
Artık Emacs'ta SSH_AGENT_PID ve SSH_AUTH_SOCK değişkenleri ayarlanmadı, bu nedenle yüklü ortamda hiçbir şey yok. Açıkçası Magit hala başladığımız yeni ssh-ajanı hakkında bilmediği için anahtarı istiyor .

Çözüm 2
Emacs'ın bu yeni değişkenleri çevreden almasını sağlamalıyız, ancak elbette, doğrudan bir yol yok.
Enter: kabuktan ortam değişkenleri almanıza olanak tanıyan exec-path-from- shell. Yani.

  1. Exec-path-from-shell paketini tercih ettiğiniz şekilde yükleyin .
  2. Emacs'ı başlattığınızda yüklenmesini sağlamak için init.el dosyasına aşağıdaki kodu ekleyin .

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

Bana doğru yönü gösteren SSH _ ** değişkenlerine bakma önerisi için teşekkürler çocuklar.


XFCE'nin acentesinden memnun kalmamanız ve kendinizinkini çalıştırmak istediğiniz herhangi bir özel neden Bunu terk etmek daha basit bir çözüm gibi görünecektir.
tripleee

Her zaman XFCE'yi çalıştırmıyorum veya masaüstünün nasıl yönettiğini umursamıyorum, oh-my-zsh'den işleyen eklentiyi tercih ederim. Bu yüzden varsayılan kullanım durumunu atlamam daha kolay. (ajan hakkında yeterince bilmiyorum ... ama yine de düşünmek için zaman harcamak istediğim bir şey değil)
Andres

Belki de Zsh bir ajanın çalıştığı durumu tanımalı ve bunun yerine ertelemeli; ama belli ki, bu konu dışı.
tripleee

1
Belki ssh-ajans unix benzeri sistemlerde de çalışacak şekilde genişletilmelidir.
npostavs

7

Tembel için başka bir çözüm, sadece tam olarak bu durumu ele alan bir paket kullanmaktır (Emacs'ın anahtarlıkla ilgili ortam değişkenlerini ayarlama):

  1. Yükleme ve init.el paket anahtarlık ortamınıza ekleyin .
  2. Koş M-x keychain-refresh-environmentve şimdi çalışmalı.
  3. Yeri (keychain-refresh-environment)sizin init.el içinde, Emacs yeniden başlattıktan sonra çözüm işler öylesine

Ve hepsi bu, ssh-agent'ınızın yapılandırılmış ve çalışıyor olduğunu varsayarsak.

Paketin yorumundan gerçekten iyi bir açıklama:

Anahtarlık ssh-agent ve gpg-agent'ı yöneten bir betiktir. Genellikle kabuğun başlatma dosyasından çalıştırılır. Kabuklarınızın ve cron işlerinizin tek bir ssh-ajanı ve / veya gpg-ajanı paylaşmasına izin verir.

Anahtarlık çalıştırıldığında, çalışan ajanı kontrol eder, aksi takdirde onları başlatır. Aracıların ortam değişkenlerini ~ / .keychain / içindeki dosyalara kaydeder, böylece sonraki kabuklar bu dosyaları kaynaklayabilir.

Emacs doğrudan bir terminalden değil X11 altında başlatıldığında bu değişkenler ayarlanmaz. Bu kütüphane anahtarlık tarafından oluşturulan bu dosyaları arar ve Emacs'ın ortam değişkenlerini buna göre ayarlar. Aslında anahtarlık çalıştırmaz, bu yüzden önce bunu bir giriş kabuğundan çalıştırmanız gerekir.

Kullanmak için init dosyanızdaki `keychain-refresh-environment 'işlevini çalıştırın. Emacs'ı başlattığınızda anahtarlık henüz çalıştırılmadıysa, daha sonra bu işlevi etkileşimli olarak çağırabilirsiniz.

Ayrıca bakınız: http://www.funtoo.org/wiki/Keychain


1
Zaten kullandığımdan beri tam da ihtiyacım olan şey bu keychain.
xji

1

FWIW, keychainşimdi --systemddeğişkenleri sistemd kullanıcı ortamına enjekte edecek bir anahtara sahiptir .

Bulduğum en basit çözüm eval "$(keychain --eval --quiet --noask --systemd keys...)", Emacs sunucusunu başlatmak için systemd biriminden çalıştırılan bir komut dosyasına eklemekti .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.