これは私が長く抱えていた問題なのですが、何かを調べようとするたびに迷うので、ここに聞いてみるともっと経験の多い方が手伝ってくれると思いました。
背景
私のRaspberry PiはRaspbian Jessieを実行しており、SSHを使用してリモートでログインしてコマンドを実行することがよくあります。最初のSSHセッションでssh-agent
プロセスが作成されることがわかりました。ラズベリーパイからログインするたびに、しかし決して実行されませんexit
。ログインおよびシャットダウン時にそのプロセスが終了し、多くのssh-agent
プロセスが作成され、何もしません。マンページと回答を後にして、最近の目的について知り、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
正しい権限/ユーザー/グループを設定する偽の名前に変更し、再実行して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
理由はわかりませんが、ソケットファイル名の数字は常にプロセス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つの質問しかしません。
- どこで、どのようにこのようなことが
ssh-agent
起こり、誰が命令したのですか? - 必要な環境変数を設定せずに正しい方法で呼び出してプロセスを無期限に停止するのはどうですか?
答え1
私は次のようないくつかの理由があるかもしれないことを知っています。
これにより、
libpam-ssh
セッションの開始時に自動的にSSHエージェントを起動できます。パスワードがない場合、またはパスワードがログインパスワードと同じ場合は、キーを自動ロードすることもできます。これを使用している場合は、
gpg-agent
実行するアクションを選択することもできますssh-agent
。シャットダウンは異なる方法で処理されるため、SSH_AUTH_SOCK
代わりに環境変数しかありません。SSH_AGENT_PID
ワークステーションでSSHエージェント(PuTTY's Pageantなど)を実行し、エージェント転送が有効になっているときにSSH接続を確立した場合(そしてリモートでそれを許可する場合)、リモートホストはエージェントがどちらを設定するかを設定するため、 ...のみ
sshd
表示されます。インターフェイスがトンネルを通過すると、それをローカルワークステーションのSSHエージェントに返します。SSH_AUTH_SOCK
SSH_AGENT_PID
sshd
答え2
これは古い質問です。しかし、SSH_AUTH_SOCK
どの環境変数が設定されているかを調べるためにここに来た場合記載されている他のすべての場所を除いて、それなら答えはですsshd
。
sshd
SSH_AUTH_SOCK
これは、プロキシ転送を有効にするとAllowAgentForwarding yes
設定されます/etc/sshd_config
(デフォルトでは有効)。
SSH_AUTH_SOCK
パスが変更されたように見えるため、他のパスを使用するようにsshdを構成することはできません。ハードコード。
SSH_AUTH_SOCK
プロキシ転送が無効になっていると設定されません。
man sshd_config
:
ユーザーはいつでも独自のフォワーダーをインストールできるため、プロキシ転送を無効にしてもユーザーのシェルアクセスが拒否されない限り、セキュリティは向上しません。