найти pid открытого порта tcp, как обычный пользователь

найти pid открытого порта tcp, как обычный пользователь

С локального хоста я создаю SSH-туннель между удаленным хостом и портом на моем локальном хосте, так что любой пользователь удаленного хоста может использовать свой «локальный» порт для доступа к моему порту через этот туннель.

Для этого я использую обычную учетную запись пользователя (не root) на обоих хостах.

Например: tunnelingdaemon с моего локального хоста подключается к tunnelingdaemon@remotehost ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ..., открывает порт 2222 на удаленном хосте и подключает его к порту 22 на моем локальном хосте.

Пользователь root на удаленном хосте может использовать netstat, lsof, или , fuserчтобы найти PID процесса, который открыл и туннелировал этот порт 2222. Но обычный пользователь (tunnelingdaemon) не может этого сделать.

Например

корень:

root@remote_host:/# fuser 2222/tcp
2222/tcp:            13709
root@remote_host:/#

tunnelingdaemon:

tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$

На удаленном хосте,Я могу завершить этот процесс как обычный пользователь (tunnelingdaemon)под которым туннель открыт в первую очередь, ноМне нужны права root, чтобы узнать, какой процесс следует завершить..

Это проблема. Мне нужно найти решение.

решение1

Например, порт «8889»:

lsof -i -P | grep 8889

работает для меня.

Затем вы можете убить PID (второй столбец вывода)

решение2

Может быть, попробовать ssс -pпереключателем? Вам не нужно повышать до, rootчтобы выполнить эту команду.

Отman ss

   -p, --processes
          Show process using socket.

Пример:

ss -p | grep dropbox
u_str  ESTAB      0      0       * 25994                 * 25995                 users:(("dropbox",pid=1869,fd=22))

решение3

Вы можете написать PID-файл:

ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'

Связанный контент