sudoを使用せずにポートを使用してプロセスを決定する


11

特定のポートを使用しているプロセス(特にプロセスID)を確認したいのですが。1つの問題は、sudoを使用したくない、またはrootとしてログインしていないことです。これが動作するようにしたいプロセスは、プロセスIDを見つけたいのと同じユーザーによって実行されているので、これは簡単だと思っていたでしょう。

両方ともlsofnetstatsudoを使用して実行しない限り、プロセスIDを教えてくれません-ポートが使用されていることを教えてくれます。

いくつかの追加のコンテキストとして-私は管理しているサーバーにすべてSSH経由で接続し、リバースポート転送を作成するさまざまなアプリを持っています。これらが設定されると、サーバーは転送されたポートを使用して処理を行い、その後接続を切断できます。特定のポート(各アプリに独自のポートがある)をプロセスにマップできる場合、これは単純なスクリプトです。助言がありますか?

ちなみに、これはUbuntuボックス上にあります-しかし、ほとんどのLinuxディストリビューションでは、どのソリューションも標準になると思います。

回答:


7

--programnetstat のオプションは、独自のプロセスのPIDと名前を表示します。このオプションは存在し、net-tools 1.60のうちnetstat 1.42のRHEL 6で機能します。

netstat -an --tcp --programプロセスのPIDが表示されることを確認しました。


1
私はあなたが意味したと思います-annetstat -pantまた機能し、覚えやすいです。
エドゥアルドイヴァネック

はい、余分な「-」が入り込んだ。そして、私はニーモニックが好きだ。
パウェウブロダッキ

Ubuntuでこれが機能しないのではないかと思います-ルートなしではプロセスが表示されない場合があり、SSHフォワードがそのようなケースのようです。
パット

Pawel:OPの使用例がついに具体的になりました(チェーンのコメントを参照)。もう一度試してみてください。CentOS 5ボックス(net-tools 1.60のnetstat 1.42)で実行しましたが、彼が言うように失敗します。あなたの経験に興味があります。
MadHatter

3

Pawelの提案は私にはうまくいくように思えますが、代わりにshell1から聞いています。

[madhatta@risby ~]$ nc -l  localhost 3456

そして、私lsofはshell2からそれを見ています:

[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nc      18109 madhatta    3u  IPv4 69205153      0t0  TCP localhost.localdomain:vat (LISTEN)

編集:あなたがコメントを書く

SSHフォワードは異なる動作をする必要があります-プロセスが同じユーザーによって所有されている場合でも、root / sudoとして実行しない限り、lsof出力にプロセスがまったく表示されません。

しかし、これは私にはそうではありません。sshを使用してローカルポート8001を転送すると ssh vpn.example.com -L 8001:rt.int:80、次のようになります。

[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     5375 madhatta    8u  IPv6 381234      0t0  TCP [::1]:vcom-tunnel (LISTEN)
ssh     5375 madhatta    9u  IPv4 381235      0t0  TCP 127.0.0.1:vcom-tunnel (LISTEN)

できればあまり編集されていないサンプル出力の一部を見せていただけますか?


1
SSHフォワードは異なる動作をしなければならないように見えます-プロセスが同じユーザーによって所有されているlsof場合でも、root / sudoとして実行しない限り、出力にリストに表示されません。
パット

ユーザーとして実行すると、転送されたポートでlsof出力がまったく表示されません。sudoを使用して実行すると、回答に追加したものと同じような出力が表示されます。注目すべき違いは、vcom-tunnelの代わりに実際のポート番号が表示されることだけです。
パット

また、これはローカル転送ではなくリモート転送です-おそらくそれが違いの原因ですか?または、リモート転送でテストしていましたか?
パット

リモート転送とは、「サーバーAI sshからサーバーBへ、ポートxxxをサーバーBからサーバーAに転送する」という意味ですか?もしそうなら、なぜあなたはサーバーAのnetstat / lsofで何かを拾うことを期待しますか?これにより、サーバーAの新しいリスナーは作成されないため、サーバーAのポート割り当ては行われません(一時的に保存されます)。
MadHatter

AからBへのSSH、(Aのファイアウォールの内側にある-フォワードのために、したがって必要)CのポートYとBのポートXからポートフォワード、使用のlsof / netstatのポートXのBに
パット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.