Làm thế nào tôi có thể giải quyết vấn đề ssh-agent này?


17

Tôi đang sử dụng Linux Mint và dường như không thể có khóa gnome để tự động mở khóa khi đăng nhập.

Một triệu chứng của vấn đề của tôi là như sau:

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

Làm thế nào tôi có thể làm cho nó git có thể đẩy / kéo mà không cần bất kỳ đầu vào cụm mật khẩu nào từ tôi?

Tôi nhận ra có một số điều ở đây với gnome-keyring và ssh-agent, nhưng không thể đóng nó xuống.

Chạy ssh-addtrong một phiên có nghĩa là tôi không còn được yêu cầu sử dụng cụm mật khẩu cho SSH / git.

Vấn đề là tôi sẽ cần phải chạy ssh-addtrong mỗi phiên - Tôi phải thiếu cách mở khóa bằng khóa của Gnome khi đăng nhập.

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

Nó đã xảy ra một lần nữa trong cùng phiên với lần chỉnh sửa đầu tiên. Tôi đã làm git pullvà có WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory.

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager

1
Bạn có thể chạy export | grep GNOMEvà gửi kết quả. Bạn đã thấy lỗi này ?
didster

Trông giống như một lỗi có liên quan. Vì tôi không luôn thấy cảnh báo, tôi không chắc mình có vấn đề đơn giản hơn không, chỉ đơn giản là gnome-keyringmở khóa tự động khi đăng nhập.
eoinoc

có thể bạn có một tác nhân khác ngoài gnome-keyring đang chạy. Thế còn env | grep SSHps -fp $SSH_AGENT_PID
Stéphane Chazelas

@StephaneChazelas Tôi đã thêm những gì bạn đề xuất, cảm ơn. Vâng, tôi đã làm cho cuộc sống phức tạp với zshtmuxchạy (chỉ để đề cập đến điều đó).
eoinoc

Câu trả lời:


2

Điều gì có nghĩa là sẽ xảy ra là:

Bạn bắt đầu một phiên gnome, một phần của trình nền gnome-keyring (cũng hoạt động như một tác nhân ssh) bắt đầu và môi trường của bất cứ điều gì bắt đầu trong phiên gnome đó được cập nhật với thông tin về cách liên hệ với tác nhân ssh đó. Mật khẩu bạn cấp khi đăng nhập bằng đồ họa được sử dụng để mở khóa khóa mặc định.

Khi bạn sử dụng gnome-keyring làm tác nhân ssh, bạn không muốn sử dụng tác nhân khác như thế nào ssh-agent.

Khi phiên X của bạn kết thúc, gnome-keyring cũng vậy. Nhưng phiên tmux của bạn vẫn còn. Sau đó, ngay cả khi bạn bắt đầu một gnome-keyring hoặc ssh-agent khác, môi trường của các quy trình đã được bắt đầu bằng cách tmuxkhông thể nói chuyện với nó trừ khi bạn cập nhật môi trường của chúng với đường dẫn của ổ cắm mới.

Những gì bạn có thể làm là:

gnome-keyring-daemon -r > ~/.gkr

Và thực hiện . ~/.gkrtrong tất cả các shell bạn muốn sử dụng khóa gnome mới

Coi chừng mặc dù HIỂN THỊ mà gnome-keyring-daemon sẽ kết nối với.


Bạn có nghĩa là điều này chỉ dành cho khi phiên X của tôi kết thúc, nói cách khác bất cứ khi nào tôi đăng xuất và đăng nhập lại? Tôi không có .gkr, tôi nên? Làm thế nào tôi có thể cẩn thận với màn hình gnome-keyring-daemonsẽ kết nối với?
eoinoc

2

Điều đầu tiên tôi sẽ thử là apt-get install ssh-askpass-gnomenếu bạn chưa cài đặt gói đó (hoặc một số chương trình hỏi đường thay thế), thì gnome không thể nhắc bạn nhập mật khẩu khi bạn cần mở khóa.

Bạn cũng cần phải DISPLAYđặt biến của mình đúng cách:

$ echo $DISPLAY
:0.0

Ngoài ra, làm thế nào bạn bắt đầu thiết bị đầu cuối của bạn? Có thể có một vấn đề với cách bạn đang bắt đầu phiên cuối và liệu nó có kế thừa từ đó hay không gnome-session. Điều này có thể xảy ra khi bạn sử dụng một số chương trình gnon-gnome để đặt các ràng buộc chính của bạn.

Giả sử bạn sử dụng gnome-terminalbạn có thể kiểm tra bằng cách sử dụng pstree. Ở đây bạn có thể thấy sự kế thừa chính xác xảy ra:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

Trong khi đó trong phiên này, nó KHÔNG được kế thừa từ gnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

Ngoài ra, kiểm tra xem ssh-agentđang được bắt đầu bởi gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)

Có một chút phức tạp về thiết bị đầu cuối mà tôi đang sử dụng (lỗi của riêng tôi!). Lệnh khởi chạy đầu cuối của tôi là mate-terminal --maximize -e tmux(mà tôi đoán gnome-terminal). Hơn nữa, zshsau đó được tải trong tmux. ssh-askpass-gnomeđã được cài đặt. $DISPLAYđã có kết quả như mong đợi. Đối với thừa kế, tmuxđang ngồi dưới mate-terminalkhông có động lực của gnome-session. Trên một nhánh riêng, nó tmux───zsh───xargs───pstree. Để trả lời câu hỏi cuối cùng của bạn, đầu ra là : init───mdm───mdm───x-session-manag───ssh-agent. Bạn nghĩ sao? Cảm ơn.
eoinoc

tốt, giả sử bạn sử dụng gnome (và tôi nghĩ Mint làm theo mặc định, vì vậy trừ khi bạn thay đổi nó từ mặc định?) thì tôi nghĩ rằng không có sự mate-terminalkế thừa của bạn gnome-sessionlà vấn đề. hai câu hỏi: 1) đầu ra của pgrep -fl gnome-sessionvà; 2) bạn thực hiện hành động nào để thực sự gọi thiết bị đầu cuối của mình? từ thực đơn? từ một ràng buộc phím nóng? hoặc là ????
aculich

Vâng, tôi đang ở trên Gnome. 1) Đầu ra trống rỗng. 2) Rất thú vị. Tôi thường làm Ctrl+Alt+t. Đó là lối tắt tôi đặt bằng ứng dụng Linux Mint Keyboard Shortcutsbằng lệnh tôi đã đề cập trước đó. Tuy nhiên , khi khởi chạy Terminalqua menu "Bắt đầu" chính, SSH đã hành động khác . GUI Gnome đã nhắc tôi nhập mật khẩu vào khóa của mình. Tùy chọn lưu cụm mật khẩu này cho các phiên sau đó bị mờ đi, tôi không thể chọn nó. (Lệnh launcher menu cũng vậy mate-terminal --maximize -e tmux.) Điều đó có giúp chúng ta gần hơn không? Cảm ơn, aculich.
eoinoc

Nếu bạn đang thấy hành vi kỳ quặc với hành vi Ctrl+Alt+tbạn đặt trong Phím tắt thì tôi nghĩ có lẽ bạn đang gặp lỗi trong mdm / MATE. Phiên bản Mint nào bạn đang chạy?
aculich

Tôi là một phiên bản phía sau, trên Linux Mint 13. Nhưng đối với thiết bị đầu cuối truy cập menu, tại sao nó vẫn không cho phép tôi chọn "lưu cụm mật khẩu này cho mỗi lần tôi đăng nhập"?
eoinoc

1

Tôi nghĩ vấn đề về việc lưu trữ vĩnh viễn khóa SSH được bảo vệ bằng mật khẩu.

Xin hãy xem các tài nguyên sau:


Tôi sẽ bình luận khi tôi đi. Với liên kết đầu tiên, tôi đã thêm `IdentityFile ~ / .ssh / id_rsa` vào ~/.ssh/confignhưng điều đó không khắc phục được.
eoinoc

Liên kết thứ ba cho thấy thiết lập cơ bản dường như không đi xa hơn những gì tôi đã làm. Cảm ơn, mặc dù.
eoinoc

-1

Thêm phần này vào .bash_profile của bạn

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi

Cảm ơn Mark. Với điều này, $SSH_AUTH_SOCKcó một giá trị /tmp/ssh-QCndYkdq2025/agent.2025. Tui bỏ lỡ điều gì vậy? $git pullvẫn đưa ra lời nhắc mật khẩu SSH.
eoinoc

Kiểm tra quyền của bạn trên tệp .ssh / ủy quyền của bạn trên máy chủ. Nó sẽ là 0600.
Mark Cohen

Trên máy chủ? GitHub là máy chủ bên ngoài và khóa SSH của tôi được ghi lại ở đó. Đây không phải là một vấn đề địa phương, phải không?
eoinoc

Xin lỗi, không nhận ra bạn đang sử dụng github. Vâng, bạn không có quyền kiểm soát máy chủ đó. Bạn có thể thêm nhiều khóa vào tác nhân ssh của mình và thử nghiệm sshing vào localhost để đảm bảo bạn có thể xác thực đúng cách. Ngoài ra, bạn có thể dùng thử ssh -vvv user @ host và xem những gì vi phạm.
Mark Cohen

Hầu hết các hệ thống Linux trên máy tính để bàn (bao gồm Mint) xử lý ssh-agentđúng cách khi đăng nhập ngay lập tức và nó thường là những thứ của riêng bạn như thế này phá vỡ nó. Nếu vì lý do nào đó, hệ thống của bạn không xử lý ssh-agent, đừng làm bằng tay. Thay vào đó sử dụng móc khóa được thiết kế tốt để xử lý vấn đề này và các vấn đề liên quan. Nó cũng hoạt động cho BSD (Mac) và các hệ thống không phải Linux khác.
aculich
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.