このssh-agentの問題を解決するにはどうすればよいですか?


17

私は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がパスフレーズの入力なしでプッシュ/プルできるようにするにはどうすればよいですか?

gnome-keyringとssh-agentにはいくつかのことがありますが、特定することはできませんでした。

ssh-addセッション中に実行すると、SSH / 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
export | grep GNOME結果を実行して投稿できますか。このバグを見たことがありますか?
ディスター

関連するバグのように見えます。警告が常に表示されるとは限らないためgnome-keyring、ログイン時に自動的にロックを解除するだけの単純な問題があるかどうかはわかりません。
eoinoc

おそらく、gnome-keyring以外の別のエージェントが実行されています。どの程度env | grep SSHps -fp $SSH_AGENT_PID
ステファンChazelas

@StephaneChazelasあなたの提案を追加しました、ありがとう。はい、私は人生を複雑にしzshtmux実行しています(言及するだけです)。
eoinoc

回答:


2

起こることを意図しているのは:

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

gnome-keyringをssh-agentとして使用する場合、のような別のエージェントを使用したくないでしょうssh-agent

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

あなたができることは:

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

そして. ~/.gkr、新しいgnome-keyringを使用するすべてのシェルで実行します

ただし、どのDISPLAYがgnome-keyring-daemonに接続するかに注意してください。


これは、Xセッションが終了するとき、つまりログアウトしてから再度ログインするときにのみ使用されますか?持っていませ.gkrん どのディスプレイgnome-keyring-daemonに接続するのか、どのように注意できますか?
eoinoc

2

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

DISPLAY変数を適切に設定する必要もあります。

$ echo $DISPLAY
:0.0

また、端末をどのように起動していますか?ターミナルセッションを開始する方法と、セッションを継承するかどうかに問題がある可能性がありますgnome-session。これは、gnon-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)

私が使用している端末については少し複雑です(自分の責任です!)。私の端末起動コマンドはmate-terminal --maximize -e tmux(これ gnome-terminal 思われます)です。さらに、zshは内にロードされますtmuxssh-askpass-gnomeインストールされました。$DISPLAY結果が期待されています。継承のために、の大きさなしでtmux座っています。別のブランチでは、です。最後の質問に答えるための出力は次のとおりです。どう思いますか?ありがとう。mate-terminalgnome-sessiontmux───zsh───xargs───pstreeinit───mdm───mdm───x-session-manag───ssh-agent
eoinoc

さて、あなたがgnomeを使用していると仮定して(そしてMintがデフォルトで使用していると思うので、デフォルトから変更していない限り?)、あなたがmate-terminal継承していないことgnome-sessionが問題だと思います。2つの質問:1)pgrep -fl gnome-sessionand の出力は何ですか。2)実際に端末を呼び出すためにどのようなアクションを取りますか?メニューから?ホットキーバインディングから?または????
aculich

はい、Gnomeを使用しています。1)出力は空です。2)非常に興味深い。私は通常しますCtrl+Alt+t。これは、Keyboard Shortcuts前述のコマンドを使用してLinux Mintアプリケーションを使用して設定したショートカットです。ただしTerminalメインの[スタート]メニューから起動すると、SSHの動作は異なります。Gnome GUIにより、キーリングへのパスワードの入力が求められました。後のセッションのためにこのパスフレーズを保存するオプションはグレー表示され、選択できませんでした。(メニューランチャーコマンドもmate-terminal --maximize -e tmuxです。)それで私たちは近づきますか?ありがとう、aculich。
eoinoc

Ctrl+Alt+tキーボードショートカットで設定した動作に奇妙な動作が見られる場合は、おそらくmdm / MATEのバグが発生していると思います。どのバージョンのMintを実行していますか?
aculich

Linux Mint 13では1バージョン遅れていますが、メニューにアクセスする端末の場合、「ログインするたびにこのパスフレーズを保存する」を選択できないのはなぜですか?
eoinoc

1

パスワードで保護されたSSHキーを永続的に保存することには問題があると思います。

以下のリソースをご覧ください。


コメントをしていきます。最初のリンクでは、 `IdentityFile〜/ .ssh / id_rsa`を追加しました~/.ssh/configが、修正されませんでした。
eoinoc

3番目のリンクは、基本的なセットアップを示していますが、これは私がすでに行ったものよりも先に進めないようです。でもありがとう。
eoinoc

-1

これを.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

ありがとうマーク。これにより$SSH_AUTH_SOCK、値はになり/tmp/ssh-QCndYkdq2025/agent.2025ます。何か不足していますか?$git pullそれでもSSHパスフレーズプロンプトが表示されます。
eoinoc

サーバー上の.ssh / authorized_keysファイルの権限を確認してください。それは0600でなければなりません
マーク・コーエン

サーバー上で?GitHubは外部サーバーであり、SSHキーがそこに記録されます。これはローカルの問題ではありませんか?
eoinoc

申し訳ありませんが、githubを使用していることに気付きませんでした。ええ、あなたはそのホストを制御することはできません。ssh-agentに複数のキーを追加し、localhostに実験的に接続して、正しく認証できることを確認できます。また、ssh -vvv user @ hostを試して、何が壊れているかを確認できます。
マークコーエン

ほとんどのデスクトップLinuxシステム(Mintを含む)ssh-agentは、箱から出してすぐにログイン時に適切に処理します。通常、これを壊すのは、このようなロールユア独自のものです。何らかの理由でシステムが処理ssh-agentしない場合は、手動で実行しないでください。代わりに、この問題および関連する問題を処理するように設計されたキーチェーンを使用してください。また、BSD(Mac)およびその他の非Linuxシステムでも機能します。
aculich
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.