これは長い間抱えていた問題ですが、何かを見つけようとするたびに迷子になるので、経験豊富な人がどこで助けてくれるのか、ここで尋ねたほうがいいと思いました。
バックグラウンド
私の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つの質問しか持っていません:
- これ
ssh-agentはどこでどのように生成され、誰がコマンドを発行しますか? - 必要な環境変数を設定せずに、適切な方法で呼び出されないため、プロセスを無期限にハングアップさせないでください。
~/.bashrc。