
С локального хоста я создаю 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'