Что касается улучшений, это будет зависеть от того, какие данные из lsof -Pi
вас интересуют.
Вот "один вкладыш" (не так уж и много.. )который печатает команду, PID, пользователя, узел, IP, порт и геоIP:
echo -e "COMMAND\tPID\tUSER\tNODE\tIP\tPORT\tGEO"; IFS=$'\n'; for line in $(lsof -Pi | grep ESTABLISHED | grep -E '*(([0-9]{1,3})\.){3}([0-9]{1,3}){1})*'); do cmdpidusr=$(echo $line | awk '{print $1,$2,$3}'); node=$(echo $line | awk '{print $8}'); ipadd=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 1); port=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 2); geoip=$(geoiplookup $ipadd | cut -d : -f 2); echo -e "$cmdpidusr\t$node\t$ipadd\t$port\t$geoip"; done | column -t; unset IFS
напр. выход:
┌─[root@Fedora]─[~]─[10:22 am]
└─[$]› echo -e "COMMAND\tPID\tUSER\tNODE\tIP\tPORT\tGEO"; IFS=$'\n'; for line in $(lsof -Pi | grep ESTABLISHED | grep -E '*(([0-9]{1,3})\.){3}([0-9]{1,3}){1})*'); do cmdpidusr=$(echo $line | awk '{print $1,$2,$3}'); node=$(echo $line | awk '{print $8}'); ipadd=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 1); port=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 2); geoip=$(geoiplookup $ipadd | cut -d : -f 2); echo -e "$cmdpidusr\t$node\t$ipadd\t$port\t$geoip"; done | column -t; unset IFS
COMMAND PID USER NODE IP PORT GEO
synergys 16444 user1 TCP 172.1.1.1 59116 IP Address not found
ssh 21557 root TCP 1.2.3.4 2291 GB, United Kingdom
если вы хотите, чтобы это было функцией в вашем .bashrc
или что-то в этом роде, вы можете сделать его немного красивее:
iplookup() {
echo -e "COMMAND\tPID\tUSER\tNODE\tIP\tPORT\tGEO"
IFS=$'\n' # set field separator to new line
for line in $(lsof -Pi | grep ESTABLISHED | grep -E '*(([0-9]{1,3})\.){3}([0-9]{1,3}){1})*'); do # this is just a regex grep to pull lines with valid IPv4 addresses only
cmdpidusr=$(echo $line | awk '{print $1,$2,$3}')
node=$(echo $line | awk '{print $8}')
ipadd=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 1)
port=$(echo $line | awk '{print $9}' | cut -d ">" -f 2 | cut -d ":" -f 2)
geoip=$(geoiplookup $ipadd | cut -d : -f 2)
echo -e "$cmdpidusr\t$node\t$ipadd\t$port\t$geoip"
done | column -t # organise the columns
unset IFS # set field separator to default
}
обратите внимание, что это не будет работать для поиска IPv6, потому что вам нужно будет использовать geoiplookup6
для этого. Вы можете добавить условие, которое проверяет тип IP, а затем запускает geoiplookup/6
в зависимости от вывода. например:
...
type=$(echo $line | awk '{print $5}')
if [ "$type" = "IPv4" ]; then
geoip=$(geoiplookup $ipadd | cut -d : -f 2)
else
geoip=$(geoiplookup6 $ipadd | cut -d : -f 2)
fi
...
но чтобы использовать это с приведенным выше кодом, вам нужно либо удалить регулярное выражение IPv4, либо добавить к нему IPv6
Во-первых, чтобы повысить пропускную способность, вы можете включить Compression
в файле конфигурации. Поскольку, как правило, большая часть того, что передается, является текстом, между клиентом и сервером может быть сжата значительная полоса пропускания.
Во-вторых, вы можете изучить управляющие сокеты, которые повторно используют первое установленное соединение с системой. Это ускорит соединения, так как только один разрывается и устанавливается. Найдите ControlMaster
, ControlPath
и ControlPersist
на справочной странице ssh_master(5)
.
В-третьих,вы можете попробовать запустить screen(1)
или tmux(1)
в удаленной системе, что позволит вам создавать там виртуальные вкладки и иметь возможность переключаться между ними, не открывая новых соединений ssh.
Наконец, попробуйте создать закрытые/открытые ключи SSH (c.f. ssh-keygen
и ssh-agent
), поэтому вы не используете пароли для входа в систему. Они более безопасны и будут использоваться для шифрования данных между двумя машинами (, которые вам также понадобятся ).
Возможно, это не лучший вариант, но если вы хотите пропустить обучение работе с мультиплексорами терминалов, такими как tmux
или screen
, вы можете попробовать запустить эмулятор оконного терминала X -с поддержкой нескольких вкладок -через ssh
.
Обратите внимание, что X-приложения через ssh
, возможно, медленные (, возможно, не из-за низкой нагрузки эмулятора терминала ), и запуск их через ssh
может быть вообще запрещен со стороны сервера.
Тем не менее:
Поиск возможных эмуляторов на сервере
Предполагаяbash
-оболочку
ssh user@server 'echo $PATH | tr : \\n | while read line ; do find $line | grep -i term ; done'
Удаленный запуск эмулятора
Если список возвращает, например. gnome-terminal
, запустить:
ssh -X user@server 'gnome-terminal'
Опять же, возможно, медленно, возможно, не включено, возможно, сервер не имеет подходящего эмулятора, а некоторые эмуляторы даже имеют имена без «терминов».