Magit, cách sử dụng tác nhân ssh của hệ thống và không hỏi mật khẩu


19

Tôi đã googled và đọc FAQ và Wiki cho Magit, nhưng vẫn không thể hiểu điều này, tất cả những gì tôi tìm thấy là câu trả lời về Windows ...

Làm cách nào tôi có thể định cấu hình Magit để sử dụng phiên ssh-agent đang chạy của mình và không hỏi mật khẩu khi thực hiện thao tác đẩy.

Tôi đang chạy linux và khởi động ssh-agent với thiết bị đầu cuối của mình và sau đó mở khóa, điều này cho phép tôi thực hiện git đẩy, v.v. mà không cần tôi nhập mật khẩu mỗi lần.

Env:
Arch Linux
Emacs 24.4

ssh-agent với các phím được thêm vào, để mở khóa trên terminal đầu tiên được mở.

EDIT: Tôi có nghĩa là sử dụng cụm mật khẩu, bạn biết cho khóa ssh, et al.
Và tôi đang chuyển sang Bitbucket, nhưng tôi tin rằng vấn đề chính là Magit không nói / nhận ra tác nhân ssh của tôi.
Có lẽ có một số cấu hình để thiết lập, để nói với nó rằng tôi đang chạy nó ??


Thực tế đi kèm với cùng một câu hỏi.
emacsomancer

Url từ xa là gì? http: // hoặc git: //?
Nsukami _

git@bitbucket.org trong trường hợp này, hãy thiết lập như vậy: url = git@bitbucket.org:
Andres

Bạn có thể cho chúng tôi biết những gì Emacs sẽ trở lại khi bạn làm M-x getenv SSH_AGENT_PIDkhông? M-x getenv SSH_AUTH_SOCK
Nsukami _

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

Câu trả lời:


13

Chà, điều này hóa ra lại giống một cái hố thỏ hơn tôi ... Và với những gì tôi có thể thu thập thì không có giải pháp nào tốt hơn cho vấn đề cụ thể này, với sự kết hợp giữa máy tính để bàn, ssh-agent, emacs.

Vấn đề 1
XFCE đã bắt đầu tác nhân ssh-agent của riêng nó với phiên, mà không thực sự nói ở bất cứ đâu, điều này khiến hệ thống có 1 tác nhân ssh toàn cầu không sử dụng và tác nhân mở khóa cụ thể của tôi.
Trên một DE khác, bạn có thể chạy với cùng một vấn đề và sẽ cần tìm thông tin cụ thể để vô hiệu hóa tự động khởi động tác nhân.

Giải pháp 1
Chạy lệnh này để vô hiệu hóa ssh-agent khởi động thực thi

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

Vấn đề 2
Bây giờ Emacs không có bất kỳ biến SSH_AGENT_PIDSSH_AUTH_SOCK nào được đặt, vì vậy không có gì trên môi trường được tải. Rõ ràng Magit vẫn yêu cầu chìa khóa vì nó không biết về tác nhân ssh mới mà chúng tôi đã bắt đầu.

Giải pháp 2
Chúng ta cần phải có Emacs tìm nạp các biến mới này từ môi trường, nhưng tất nhiên, không có cách nào thẳng tiến.
Enter: exec-path-from-shell cho phép bạn tìm nạp các biến môi trường từ shell của mình. Vì thế.

  1. Cài đặt gói exec-path-from-shell theo cách bạn thích.
  2. Thêm mã sau vào init.el của bạn để nó tải khi bạn khởi động Emacs.

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

Cảm ơn các bạn đã gợi ý về việc xem xét các biến SSH _ **, điều đó đã chỉ cho tôi đi đúng hướng.


Bất kỳ lý do cụ thể nào bạn không hài lòng với đại lý của XFCE và muốn tự chạy? Từ bỏ mà có vẻ như là giải pháp đơn giản hơn.
tripleee

Tôi không phải lúc nào cũng chạy XFCE, tôi cũng không quan tâm đến cách máy tính để bàn quản lý nó, tôi thích plugin xử lý nó từ oh-my-zsh. Vì vậy, nó dễ dàng hơn cho tôi để bỏ qua trường hợp sử dụng mặc định. (được cho là tôi không biết gần như đủ về người đại diện ... nhưng đó không phải là điều tôi thực sự muốn dành thời gian suy nghĩ về bất cứ điều gì)
Andres

Có lẽ Zsh nên nhận ra trường hợp khi một tác nhân đang chạy và thay vào đó là trì hoãn; nhưng rõ ràng, điều này đang lạc đề ở đây.
tripleee 6/11/2015

1
Có lẽ ssh-agent cũng nên được mở rộng để hoạt động trên các hệ thống giống như unix.
npostavs

7

Một giải pháp khác cho người lười biếng là chỉ sử dụng gói xử lý chính xác trường hợp này (đặt các biến môi trường liên quan đến khóa của Emacs):

  1. Cài đặt và thêm vào môi trường móc khóa gói init.el của bạn .
  2. Chạy M-x keychain-refresh-environmentvà bây giờ nó sẽ hoạt động.
  3. Đặt (keychain-refresh-environment)vào init.el của bạn, để giải pháp hoạt động sau khi khởi động lại Emacs

Và đó là tất cả, giả sử ssh-agent của bạn được cấu hình và chạy.

Mô tả thực sự tốt, từ nhận xét của gói:

Keychain là một tập lệnh quản lý ssh-agent và gpg-agent. Nó thường được chạy từ tệp khởi tạo của shell. Nó cho phép các công việc shell và cron của bạn chia sẻ một tác nhân ssh và / hoặc gpg-agent.

Khi móc khóa được chạy, nó sẽ kiểm tra tác nhân đang chạy, nếu không nó sẽ khởi động chúng. Nó lưu các biến môi trường của các tác nhân vào các tệp bên trong ~ / .keychain /, để các shell tiếp theo có thể cung cấp các tệp này.

Khi Emacs được khởi động dưới X11 và không trực tiếp từ thiết bị đầu cuối, các biến này không được đặt. Thư viện này tìm kiếm các tệp này được tạo bởi móc khóa và sau đó đặt các biến môi trường của Emacs tương ứng. Nó không thực sự chạy móc khóa, vì vậy bạn vẫn phải chạy nó từ vỏ đăng nhập trước.

Để sử dụng, hãy chạy chức năng 'móc khóa làm mới môi trường' trong tệp init của bạn. Nếu móc khóa chưa được chạy khi bạn khởi động Emacs, sau đó bạn cũng có thể gọi chức năng đó một cách tương tác.

Xem thêm: http://www.funtoo.org/wiki/Keychain


1
Đây chính xác là những gì tôi cần vì tôi đã sử dụng keychain.
xji

1

FWIW, keychainhiện có một --systemdcông tắc, sẽ đưa các biến vào môi trường người dùng systemd.

Giải pháp đơn giản nhất tôi tìm thấy là thêm eval "$(keychain --eval --quiet --noask --systemd keys...)"vào tập lệnh chạy từ đơn vị systemd để khởi động máy chủ Emacs.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.