LINUX.ORG.RU

Определить, какой порт перенаправлен для данного пользователя

 


0

1

Ребят, никак не могу грамотно составить команду, подсобите, пожалуйста. В общем, есть сервер с публичным адресом. Я туда подключаюсь из нескольких устройств с пробросом порта: ssh -R 81:localhost:80 remoteuser@remoteserver И таких компов (клиентских) - несколько штук. Мне нужно сделать веб-форму, которая запросит имя компьютера и перенаправит на нужный порт. Собственно, это не сложно.

Никак не могу написать скрипт, который точно скажет, какой порт перенаправляется на комп, с которого залогинился этот пользователь.

lsof -i выдаёт:

sshd      37173 remoteuser    3u  IPv4 38483371      0t0  TCP srv:ssh->***.***.***.***:42357 (ESTABLISHED)
sshd      37173 remoteuser    9u  IPv4 38483529      0t0  TCP *:81 (LISTEN)
sshd      37173 remoteuser   10u  IPv6 38483530      0t0  TCP *:81 (LISTEN)
sshd      37173 remoteuser   16u  IPv4 38483624      0t0  TCP srv:81->***.***.***.***:14692 (ESTABLISHED)

По идее, я смогу выдрать отсюда инфу. Но я в замешательстве, как обработать эту строку: TCP *:81 (LISTEN). Просто взять символы от ":" и до "("? Это можно. Или можно поизящней это сделать получить эту инфу?

Спасибо

Почему до ″(″, а не до пробела? Куда изящнее не знаю, главное чтобы скрипт нормально сработал, если у одного пользователя будет много таких портов.

mky ★★★★★
()
Ответ на: комментарий от art_yomov

Второй вопрос - когда я отклюаюсь, lsof -i на сервере показывает что порты до сих пор в статусе LISTEN. Значит не вариант грепать так. Или нужно освобождать как-то?

art_yomov
() автор топика
Ответ на: комментарий от art_yomov

Не понял. Вы подключаетесь (запуская на клиенте ssh) и на сервере появляется отдельный процесс sshd, который LISTEN нужны порт. А когда отключаетесь, что, sshd на сервере остаётся?

mky ★★★★★
()
3 октября 2016 г.
Ответ на: комментарий от mky

Какое-то время они LISTEN. В общем решил вопрос грепом и авком. Топорно, зато надежно. Скрипт показывает, какой пользователь подключен к серверу с форвардом:

#!/bin/sh
user=$1
cmd=$(netstat -altpe | grep LISTEN | grep $user | grep 0.0.0.0 | awk '{print $4}')
echo ${cmd#*0:}

art_yomov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.