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


9

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

バックグラウンド

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

問題

以来は、ssh-agentログアウト時に殺されていない、これは確かに必要な環境変数が設定されていないので、それができるだけで平均1の事が起こる:呼び出し、誰でもssh-agentログイン時に、おそらく適切な方法でそれをしない(されるであろうeval "$(ssh-agent -s)"。だから私は思った:まあ、問題は何ですか?エージェントを起動して手動で修正するために実行される構成ファイル、サービス、またはログインスクリプトを見つけるだけです!一体どこにあるのでしょうか?

私が試したこと

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

~/.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'rootとして/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です。

  • dummyusing という名前の新しいユーザーを作成しましたが、そのユーザーにuseradd -m 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]
    
  • in をssh-agent -s使用grepして再帰的に検索すると、結果は得られません。/etc/lib

  • デスクトップ環境をインストールしていませんが、/etc/X11いくつかの構成ファイルを含むフォルダーがあります。私は何か他のものにフォルダの名前を変更し、念のために再起動を試みたが、プロセスはまだそう、生み出されます明らかにこれを行うにはあまり持っていません。


結論

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

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

その時あなたは何を持っているのだろう~/.bashrc
ilkkachu 2018年

@ilkkachuよし、どうぞ ...
マルコ

回答:


1

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

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

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

  • ワークステーションでSSHエージェント(PuTTYのPageantなど)を実行していて、エージェント転送が有効になっている(およびリモートでsshd許可されている)SSH接続を行った場合、リモートソケットでSSH_AUTH_SOCKSSH_AGENT_PID...はsshd、ローカルワークステーションのSSHエージェントにトンネルで戻ります。


1
提案をありがとうございましたが、残念ながらこれらのオプションはどれも私には当てはまりません。私は持っていませんlibpam-ssh。両方SSH_AGENT_PIDSSH_AUTH_SOCK(ソケットはもちろん、本とにかくである)未設定です。私は使用gpg-agentせず、PuTTYでエージェント転送を有効にしていません。私は本当に迷っています:\
Marco Bonelli、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.