Bagaimana saya bisa menyelesaikan masalah ssh-agent ini?

17

Saya menggunakan Linux Mint, dan belum bisa mendapatkan gnome-keyring untuk membuka kunci secara otomatis saat login, tampaknya.

Gejala masalah saya adalah sebagai berikut:

$ 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

Bagaimana saya bisa membuatnya bahwa git dapat mendorong / menarik tanpa input frasa sandi dari saya?

Saya menyadari ada beberapa hal di sini dengan gnome-keyring, dan ssh-agent, tetapi belum dapat memahaminya.

Menjalankan ssh-addselama sesi berarti bahwa saya tidak lagi diminta frasa sandi untuk SSH / git.

Masalahnya adalah bahwa saya harus menjalankan ssh-addselama setiap sesi - saya harus kehilangan cara membuka kunci Gnome saat login.

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

Itu terjadi lagi selama sesi yang sama dengan edit pertama. Saya lakukan git pulldan dapatkan 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
eoinoc
sumber
1
Bisakah Anda menjalankan export | grep GNOMEdan memposting hasilnya. Pernahkah Anda melihat bug ini ?
Didster
Sepertinya ada bug yang relevan. Karena saya tidak selalu melihat peringatan, saya tidak yakin apakah saya memiliki masalah yang lebih sederhana gnome-keyringdengan membuka kunci secara otomatis saat login.
eoinoc
mungkin Anda memiliki agen lain selain menjalankan gnome-keyring. Bagaimana dengan env | grep SSHdanps -fp $SSH_AGENT_PID
Stéphane Chazelas
@StephaneChazelas Saya telah menambahkan apa yang Anda sarankan, terima kasih. Ya, saya telah membuat hidup menjadi kompleks dengan zshdan tmuxberlari (hanya untuk menyebutkan itu).
eoinoc

Jawaban:

2

Yang dimaksudkan untuk terjadi adalah:

Anda memulai sesi gnome, bagian dari daemon gnome-keyring (yang juga bertindak sebagai agen ssh) dimulai dan lingkungan apa pun yang dimulai selama sesi gnome diperbarui dengan informasi tentang cara menghubungi agen ssh tersebut. Kata sandi yang Anda terbitkan saat masuk secara grafis digunakan untuk membuka kunci keyring default.

Saat Anda menggunakan gnome-keyring sebagai ssh-agent, Anda tidak ingin menggunakan agen lain seperti ssh-agent.

Ketika sesi X Anda berakhir, begitu juga gnome-keyring. Tapi sesi tmux Anda tetap. Kemudian, bahkan jika Anda memulai gnome-keyring atau ssh-agent lain, lingkungan proses yang sudah dimulai tmuxtidak akan dapat berbicara dengannya kecuali Anda memperbarui lingkungan mereka dengan jalur soket baru.

Yang bisa Anda lakukan adalah:

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

Dan lakukan . ~/.gkrdi semua shell yang ingin Anda gunakan gnome-keyring baru

Berhati-hatilah meskipun DISPLAY yang akan terhubung dengan gnome-keyring-daemon.

Stéphane Chazelas
sumber
Apakah maksud Anda ini hanya untuk saat sesi X saya berakhir, dengan kata lain setiap kali saya keluar dan masuk lagi? Saya tidak punya .gkr, bukan ? Bagaimana saya bisa waspada terhadap tampilan mana yang gnome-keyring-daemonakan terhubung?
eoinoc
2

Hal pertama yang saya coba adalah apt-get install ssh-askpass-gnomesebaliknya jika Anda tidak menginstal paket itu (atau beberapa program askpass alternatif), maka gnome tidak dapat meminta kata sandi Anda ketika Anda perlu membuka kunci kunci Anda.

Anda juga harus DISPLAYmengatur variabel dengan benar:

$ echo $DISPLAY
:0.0

Juga, bagaimana Anda memulai terminal Anda? Mungkin ada masalah dengan cara Anda memulai sesi terminal dan apakah itu berasal atau tidak gnome-session. Ini bisa terjadi ketika Anda menggunakan beberapa program gnon-gnome untuk mengatur ikatan utama Anda.

Anggap Anda menggunakan gnome-terminalAnda dapat memeriksa menggunakan pstree. Di sini Anda dapat melihat pewarisan yang benar terjadi:

$ 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}+

Sedangkan dalam sesi ini TIDAK mewarisi dari 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)

Juga, periksa yang ssh-agentsedang dimulai oleh gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
aculich
sumber
Agak rumit tentang terminal apa yang saya gunakan (kesalahan saya sendiri!). Perintah peluncuran terminal saya adalah mate-terminal --maximize -e tmux(yang saya duga adalah terminal gnome). Selanjutnya, zshkemudian dimuat di dalamnya tmux. ssh-askpass-gnomedipasang. $DISPLAYmemiliki hasil yang diharapkan. Untuk warisan, tmuxduduk di bawah mate-terminaltanpa rumah besar gnome-session. Di cabang terpisah, itu tmux───zsh───xargs───pstree. Untuk menjawab pertanyaan terakhir Anda, output adalah: init───mdm───mdm───x-session-manag───ssh-agent. Bagaimana menurut anda? Terima kasih.
eoinoc
baik, anggap Anda menggunakan gnome (dan saya pikir Mint tidak secara default, jadi kecuali Anda telah mengubahnya dari default?) maka saya pikir tidak memiliki mate-terminalwarisan Anda dari gnome-sessionmasalahnya. dua pertanyaan: 1) apa output dari pgrep -fl gnome-sessiondan; 2) tindakan apa yang Anda ambil untuk benar-benar memanggil terminal Anda? dari menu? dari pengikatan hot-key? atau ????
aculich
Ya, saya di Gnome. 1) Output kosong. 2) Sangat menarik. Biasanya saya lakukan Ctrl+Alt+t. Ini adalah jalan pintas yang saya atur menggunakan aplikasi Linux Mint Keyboard Shortcutsmenggunakan perintah yang saya sebutkan sebelumnya. Namun , ketika diluncurkan Terminalmelalui menu "Start" utama, SSH bertindak berbeda . Gnome GUI meminta kata sandi saya ke keyring saya. Pilihan untuk menyimpan frasa sandi ini untuk sesi selanjutnya diklik, saya tidak bisa memilihnya. (Perintah menu launcher juga mate-terminal --maximize -e tmux.) Apakah itu membuat kita lebih dekat? Terima kasih, aculich.
eoinoc
Jika Anda melihat perilaku aneh dengan Ctrl+Alt+tyang Anda atur di Shortcuts Keyboard maka saya pikir Anda mungkin mengalami bug di mdm / MATE. Apa versi Mint yang Anda jalankan?
aculich
Saya satu versi di belakang, di Linux Mint 13. Tetapi untuk terminal yang diakses menu, mengapa masih tidak membiarkan saya memilih "simpan frasa sandi ini untuk setiap kali saya masuk"?
eoinoc
1

Saya pikir masalah saat menyimpan kunci SSH yang dilindungi kata sandi secara permanen.

Silakan lihat sumber daya berikut:

Md Mahbubur Rahman
sumber
Saya akan berkomentar ketika saya pergi. Dengan tautan pertama, saya menambahkan `IdentityFile ~ / .ssh / id_rsa` ke ~/.ssh/configtetapi itu tidak memperbaikinya.
eoinoc
Tautan ketiga menunjukkan pengaturan dasar yang tampaknya tidak berjalan lebih jauh dari apa yang telah saya lakukan. Terimakasih Meskipun.
eoinoc
-1

Tambahkan ini ke .bash_profile Anda

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
Mark Cohen
sumber
Mark terima kasih. Dengan ini, $SSH_AUTH_SOCKmemiliki nilai /tmp/ssh-QCndYkdq2025/agent.2025. Apakah saya melewatkan sesuatu? $git pullmasih menampilkan prompt frasa sandi SSH.
eoinoc
Periksa izin Anda pada file .ssh / otor_keys Anda di server. Seharusnya 0600.
Mark Cohen
Di server? GitHub adalah server eksternal, dan kunci SSH saya direkam di sana. Bukankah ini lebih merupakan masalah lokal, bukan?
eoinoc
Maaf, tidak menyadari Anda menggunakan github. Ya, Anda tidak memiliki kendali atas tuan rumah itu. Anda dapat menambahkan beberapa kunci ke ssh-agent Anda dan bereksperimen dengan sshing ke localhost untuk memastikan Anda dapat mengautentikasi dengan benar. Juga, Anda dapat mencoba ssh -vvv user @ host dan melihat apa yang melanggar.
Mark Cohen
Sebagian besar sistem Linux desktop (termasuk Mint) menangani ssh-agentdengan benar saat masuk langsung dari kotak dan biasanya hal-hal yang Anda miliki sendiri seperti ini yang merusaknya. Jika karena alasan tertentu sistem Anda tidak menangani ssh-agent, jangan lakukan itu dengan tangan. Alih-alih menggunakan gantungan kunci yang dirancang dengan baik untuk menangani ini dan masalah terkait. Ini juga berfungsi untuk BSD (Mac) dan sistem non-Linux lainnya.
aculich