これは長い間抱えていた問題ですが、何かを見つけようとするたびに迷子になるので、経験豊富な人がどこで助けてくれるのか、ここで尋ねたほうがいいと思いました。
バックグラウンド
私の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に関連するものをリモートで参照するものはありません。次のすべてのファイル内で文字列を検索し続けましたが、何も見つかりませんでした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'
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
です。dummy
using という名前の新しいユーザーを作成しましたが、そのユーザーに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
。