このssh-agentの問題をどのように解決できますか?

このssh-agentの問題をどのように解決できますか?

私はLinux Mintを使用していますが、ログイン時にgnome-keyringを自動的にロック解除できないようです。

私の問題の症状は次のとおりです。

$ 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

パスワードを入力せずにどのようにgit push / pullを行うことができますか?

ここにgnome-keyringとssh-agent関連のエントリがあることを知っていますが、まだ確定することはできません。

セッション中に実行すると、ssh-addSSH / gitのパスワードを求めるプロンプトが表示されなくなります。

問題は、ssh-addセッションごとにこれを実行する必要があることです。ログイン時にGnomeのロックを解除する方法のキーリングはありません。

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

これは、最初の編集の同じセッション中に再び発生します。私はそれをし、git pullそれを得た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

何が起こるべきかは次のとおりです。

gnomeセッションを開始すると、gnome-keyringデーモン(sshエージェントとしても機能します)の一部が開始され、そのgnomeセッション中に開始されたすべての環境がそのSSHエージェントに接続する方法に関する情報で更新されます。グラフィカルにログインするときに発行されるパスワードは、主キーリングのロックを解除するために使用されます。

gnome-keyringをSSHプロキシとして使用する場合ssh-agent

Xセッションが終了すると、gnome-keyringも終了します。しかし、tmuxセッションはまだ存在します。その後、他のgnome-keyringまたはssh-agentを起動しても、すでに起動されているプロセスの環境は、新しいソケットパスでtmux環境を更新しない限り通信できません。

あなたができることは次のとおりです。

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

. ~/.gkr新しいgnome-keyringを使用したいすべてのシェルでこれを行います。

どのDISPLAY gnome-keyring-daemonに接続しているかを確認してください。

答え2

私が最初に試したことは、そのパッケージapt-get install ssh-askpass-gnomeがインストールされていない場合(または他のAskpassプログラム)、キーのロックを解除する必要があるときにgnomeがパスワードを求めるメッセージを表示しないことです。

DISPLAYまた、変数を正しく設定する必要があります。

$ echo $DISPLAY
:0.0

また、端末をどのように起動しますか?ターミナルセッションを開始した方法から継承されたかどうかは、gnome-session特定のgno-gnomeプログラムを使用してキーバインディングを設定したときに発生する可能性があります。

使用すると仮定すると、をgnome-terminal使用して確認できますpstree。ここで正しい継承が起こっているのがわかります。

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

そして、このセッションでは次から継承されません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)

また、以下ssh-agentで実行されていることを確認してくださいgnome-session

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

答え3

答え4

これを.bash_profileに追加する

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

関連情報