web-dev-qa-db-ja.com

誰が私のssh-agentを起動しており、なぜそれが正しく終了しないのですか?

これは長い間抱えていた問題ですが、何かを見つけようとするたびに迷子になるので、経験豊富な誰かが助けてくれる場所をここで尋ねたほうがいいと思いました。

バックグラウンド

私のRaspberry PiはRaspbian Jessieを実行しており、SSHを使用してログインし、リモートでコマンドを実行します。最初のSSHセッション中に、ログインするたびにssh-agentプロセスが生成されたRPiに気づきましたが、exitingで強制終了されませんでした。数回ログインおよびログアウトすると、一連のssh-agentプロセスがちょうど生成されました。何もせずにぶら下がったままにしておきます。マニュアルページとあちこちでいじくり回して、最近ssh-agentの目的を理解しました。また、ログアウトすると通常は強制終了されることもわかったので、なぜそうでないのかを自問し始めました。さらに、source ~/.bashrcを発行するとssh-agentの別のインスタンスが生成されることに気付きました。 SSH_AGENT_PIDプログラムをeval内で開始してその出力を実行し、そのような変数を定義して、他のSSH関連で使用する必要があるため、環境変数ssh-agentを定義する必要があることを 相対manページ で読みますssh-agent -k(現在のセッションに対してエージェントを強制終了するため)を含むコマンドなので、echo $SSH_AGENT_PIDecho $SSH_AUTH_SOCKを実行しましたが、どちらも空でした。私は突然気づきました。おそらくssh-agent -kが設定されていない環境変数からPIDを読み取ろうとするため、ログアウト時にプロセスが強制終了されません。

問題

ログアウト時にssh-agentが強制終了されないため、必要な環境変数が設定されていないためにこれが発生することは確かですが、これは1つのことを意味するだけです:ログイン時にssh-agentを呼び出すと、おそらく適切な方法で実行されません(これはeval "$(ssh-agent -s)"になります。だから私は思った:まあ、問題は何ですか?エージェントを起動して手動で修正するために実行される構成ファイル、サービス、またはログインスクリプトを見つけます。 いったいどこにあるのでしょうか

私が試したこと

ssh-agentを呼び出すたびにsource ~/.bashrcが生成されることに気付いたので、これは最初に検査したファイルでしたが、SSHに関連するものをリモートで参照するものはありませんでした。 次のすべてのファイル内でviを使用して文字列sshを検索し続けましたが、何も見つかりませんでした

~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment

source ~/.bashrcに関係する可能性のあるファイルが他にありますか?よくわかりません。

次に関連するsystemdサービスを検索しましたが、ssh.serviceであるWantedBy=multi-user.targetしか検出されなかったため、ログイン時に実行されません(これはSSHサーバーデーモンであるため、明らかです)。

また、/home/piフォルダー内のすべてのファイルを一時フォルダーに移動してみましたからログアウトして再度ログインしましたが、ssh-agentがまだ生成されています。

最終的に、私は室内で最後に撃ったショットも発射しました。ルートとしてfind / -name 'ssh-agent'を実行したため、実行可能ファイルである/usr/bin/ssh-agentのみが表示されたため、基本的には親コマンドのみを記録する偽の実行可能ファイルを作成しました

#! /bin/bash
ps -o args= $PPID        > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG

実際の/usr/bin/ssh-agentの名前を変更し、適切な権限/ユーザー/グループを設定する偽の1つに置き換え、source ~/.bashrcを再度実行して、LOGファイルを出力しました。

-bash
-bash

何が起こっているかについての単一の手掛かりではありません。

さらに詳細

もう少し詳細を追加します。役立つかどうかはわかりませんが、ご存知のように...申し訳ありませんが安全です。

  • これが私の .bashrc です。

  • useradd -m dummyを使用してdummyという名前の新しいユーザーを作成しましたが、そのユーザーにログインしてもssh-agentは起動しません(これは何かを意味しているように思えます)。 diff /home/pi/.bashrc /home/dummy/.bashrcは、diff /home/pi/.profile /home/dummy/.profileと同じように、基本的に何も表示しません(私が作成したコメントのみ)。

  • SSH_AUTH_SOCKが設定されていなくても、エージェントソケットは問題なく作成されます。

    pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/
    total 0
    srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
    

    理由は定かではありませんが、ソケットファイル名の番号は常にssh-agentプロセスのPIDの直前の番号です。

  • htopからの抜粋:

     PID  USER  PRI  NI  VIRT   RES   SHR  S  Command
       1  root   20   0  5472  3900  2728  S  /sbin/init
    1329  pi     20   0  3696   224    16  S  └─ ssh-agent -s
    
  • sshに一致するインストール済みパッケージ:

    pi:~$ apt list --installed | grep ssh
    libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed]
    libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic]
    libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic]
    openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed]
    sshpass/oldstable,now 1.05-1 armhf [installed]
    
  • ssh-agent -sおよび/etcgrepを使用して/libを再帰的に検索しても、結果はありません。

  • デスクトップ環境はインストールしていませんが、/etc/X11フォルダーに構成ファイルがいくつか含まれています。万が一に備えてフォルダの名前を変更して再起動してみましたが、プロセスがまだ起動しているので、どうやらこれはあまり関係ありません。


結論

さて、それをできるだけ簡単にするために、私は2つの質問しか持っていません:

  1. このssh-agentはどこでどのように生成され、誰がコマンドを発行しますか?
  2. 必要な環境変数を設定せずに、適切な方法で呼び出されないため、プロセスを無期限にハングアップさせないでください。
9
Marco Bonelli

考えられる理由がいくつかあります。

  • _libpam-ssh_を使用している場合は、セッション起動の一部としてSSHエージェントを自動的に起動できます。また、パスフレーズがないか、パスフレーズがログインと同じ場合は、キーを自動的にロードすることもできます。パスワード。

  • _gpg-agent_を使用している場合は、オプションで_ssh-agent_のタスクも実行できます。そのシャットダウンは異なる方法で処理されるため、_SSH_AUTH_SOCK_ではなく_SSH_AGENT_PID_環境変数のみが存在します。

  • ワークステーションでSSHエージェント(PuTTYのPageantなど)を実行していて、エージェント転送を有効にしてSSH接続を確立すると(リモートsshdで許可されます)、リモートホストでは_SSH_AUTH_SOCK_ _SSH_AGENT_PID_なし...エージェントソケットはsshdに移動し、ローカルワークステーションのSSHエージェントにトンネルされます。

1
telcoM