私のssh-agentを起動する人は誰であり、正しく終了しないのですか?

私のssh-agentを起動する人は誰であり、正しく終了しないのですか?

これは私が長く抱えていた問題なのですが、何かを調べようとするたびに迷うので、ここに聞いてみるともっと経験の多い方が手伝ってくれると思いました。

背景

私のRaspberry PiはRaspbian Jessieを実行しており、SSHを使用してリモートでログインしてコマンドを実行することがよくあります。最初のSSHセッションでssh-agentプロセスが作成されることがわかりました。ラズベリーパイからログインするたびに、しかし決して実行されませんexit。ログインおよびシャットダウン時にそのプロセスが終了し、多くのssh-agentプロセスが作成され、何もしません。マンページと回答を後にして、最近の目的について知り、ssh-agent一般的にログアウト時に終了しなければならないこともわかったので、なぜできないのかを訊き始めました。また、発行によってsource ~/.bashrc別のインスタンスが作成されることがわかりました。ssh-agent私は読み続ける関連マニュアルページSSH_AGENT_PIDssh-agent環境変数は、プログラムが実行可能ファイル内で実行され、出力を実行しevalssh-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正しい権限/ユーザー/グループを設定する偽の名前に変更し、再実行してsource ~/.bashrcファイルをLOG印刷しました。

-bash
-bash

何が起こっているのか全くわかりませんでした。

詳しくは

詳細を追加しています。役に立つかどうかはわかりませんが...後悔するよりも安全な方が良いです。

  • これは私のものです。.bashrc

  • dummyusingという新しいユーザーを作成しましたが、useradd -m dummyログインしても何も起動しません。ssh-agent(これは何か意味があるような気がします)。 .diff /home/pi/.bashrc /home/dummy/.bashrcdiff /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
    

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

  • 次のスニペット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. 必要な環境変数を設定せずに正しい方法で呼び出してプロセスを無期限に停止するのはどうですか?

ベストアンサー1

私は次のようないくつかの理由があるかもしれないことを知っています。

  • これにより、libpam-sshセッションの開始時に自動的にSSHエージェントを起動できます。パスワードがない場合、またはパスワードがログインパスワードと同じ場合は、キーを自動ロードすることもできます。

  • これを使用している場合は、gpg-agent実行するアクションを選択することもできますssh-agent。シャットダウンは異なる方法で処理されるため、SSH_AUTH_SOCK代わりに環境変数しかありません。SSH_AGENT_PID

  • ワークステーションでSSHエージェント(PuTTY's Pageantなど)を実行し、エージェント転送が有効になっているときにSSH接続を確立した場合(そしてリモートでそれを許可する場合)、リモートホストはエージェントがどちらを設定するかを設定するため、 ...のみsshd表示されます。インターフェイスがトンネルを通過すると、それをローカルワークステーションのSSHエージェントに返します。SSH_AUTH_SOCKSSH_AGENT_PIDsshd

おすすめ記事