web-dev-qa-db-ja.com

ssh-agentとやり取りできないのはなぜですか? (たとえば、ssh-add -Dは機能しません)

Kubuntu 14.04システムでは、SSHエージェントでキーを管理しようとしていますが、どういうわけかssh-addコマンドを無視しているようです。これを下で見てください、そして、あなたは私が意味するものを見るでしょう。

  1. 現在のキーをリストする

    ⟫ ssh-add -l
    2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c gert@e6230 (RSA)
    

    このキーはブート時にロードされますが、RSAではなくECDSAキーが必要でした。私はこのキーを知りません...

  2. エージェントからキーを削除します。

    ⟫ ssh-add -D
    All identities removed.
    

    うん!しかし...そうですか?

    ⟫ ssh-add -l
    2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c gert@e6230 (RSA)
    

    なんてこったい?それはただ私にある。

  3. 何が起きてる?

    ⟫ env | grep -i ssh
    SSH_AUTH_SOCK=/run/user/1000/keyring-eDJggO/ssh
    

    どのプロセスがそのソケットを実行しているか見てみましょう。

    ⟫ Sudo fuser -u /run/user/1000/keyring-eDJggO/ssh
    [Sudo] password for gert: 
    /run/user/1000/keyring-eDJggO/ssh:  9434(gert)
    ⟫ ps -p 9434 u
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    gert      9434  0.0  0.0 292528  7192 ?        Sl   00:05   0:00 gnome-keyring-daemon [...]
    

    KDEシステムでGNOMEキーリングは何をしているのですか?ここでは、KDEウォレットをSSHエージェントにするべきではありませんか?

これは答えよりも多くの質問につながり、機能しないssh-agentが残っています。

別のシステムでは、この動作を観察せず、構成の違いを見つけることができません。どちらにもKDEのみがインストールされており、インストールされているパッケージはほぼ同じです(Puppetが管理)。

7
gertvdijk

注:根本的な問題を解決する答えではありません。根本原因を解決できると思われる場合は、新しい回答を提供してください。あなたは本当に私のソリューションが単なるいハックである理由を読む必要があります。


起動時に何が起こるかについて説明し、犯人を特定します。

ログインマネージャーとしてKDM(またはLightDM)を使用すると、ログイン時にXセッションが生成されます。ログインマネージャーを使用すると、システムで使用可能なセッションに基づいてXセッション(GNOME、KDE ​​Plasmaなど)を選択できます。 /usr/share/xsessionsディレクトリには、インストールされている各デスクトップ環境のファイルが含まれ、ユーザー固有の選択は~/.dmrcに保存されます。

ログイン後、デスクトップ環境はロードされますが、/etc/X11/Xsession.d/のすべてのスクリプトをロードします。 Kubuntu 14.04システムでは、デフォルトで/etc/X11/Xsession.d/90x11-common_ssh-agentが表示され、SSHエージェントが初期化されます。予想通り。すばらしいです!

しかし実際には、さまざまなことがわかります。 gnome-keyring-daemonはどこから来て、通常のssh-agentはなぜ開始されないのですか?さて、GNOMEキーリングは2つの方法で開始されます。

  • XDG自動起動、/etc/xdg/autostart/gnome-keyring-ssh.desktop
  • Upstartとして セッションジョブ in /usr/share/upstart/sessions/gnome-keyring.conf

すべてのスクリプトは、最初に環境値をチェックして、続行するかどうかを確認します。例えば。

[ -z "$SSH_AUTH_SOCK" ] || [ -z "$GPG_AGENT_INFO" ] || { stop; exit 0; }

これにより、SSHエージェントが実際に開始される一種の競合状態になります。最初のものが勝ちます。より厄介なビットのためのブレース。

どうして1台のマシンで動作するのか信頼性の高いで、動作しないのは信頼性の高い別に? Xセッションのupstartジョブは、DESKTOP_SESSIONによって処理される/etc/upstart-xsessions/etc/X11/Xsession.d/00upstart環境変数がホワイトリストに登録されている場合にのみ開始されます。 KDMを使用すると、デスクトップ環境を「デフォルト」(~/.dmrcdefault)、実質的にkde-plasmaに設定できますが、kde-plasmaは表示されません。

Session=kde-plasmaを使用:

⟫ echo $DESKTOP_SESSION
kde-plasma

KDE PlasmaデスクトップでSession=defaultを使用する場合:

⟫ echo $DESKTOP_SESSION
default

これは明らかに間違っています。そして、/etc/upstart-xsessionsに対するホワイトリストチェックに失敗する理由を推測できます。

ターミナルセッションを実行するためのクイックフィックス

killall gnome-keyring-daemon && eval `ssh-agent`

結論

すべてのUpstartセッションジョブがまったく開始されないというバグが発生する可能性があるようです。別のバグにより、GNOMEキーリングSSHエージェントとの適切なインターフェースが妨げられます(またはssh-addが文句を言い、失敗するはずです)。ああ、嫌いだよ、バグ。

何が正確に何をするのかを調査する時間を見つけたら、バグレポートを提出します。

今のところ、Session=defaultを設定することで、Upstartのバグを「使用」し、Upstartセッションジョブが実行されないようにすることにしました。これがどれほど壊れるかはわかりませんが、これまでのところ、何もバラバラになることはありません。

根本的な原因は、そもそもGNOMEキーリングの外観であり、私にうそをついて間違ったキーを提供し続けるべきではありません。

6
gertvdijk

とにかくSudo apt-get remove --purge gnome-keyringとにかく、その後再起動します。 ubuntu-ssoはそれに依存していますが、私はそれを使用しないので、心配はありません。

ssh-agentは、その後正常に機能するようです。

2
kaleissin

これは古いスレッドであることがわかります。 xubuntu 16.04を使用しています。バグはまだ残っているようです。キーを管理するためにタツノオトシゴをインストールしましたが、うまくいきました。

1
VGR