Ярлык для подключения к удаленному SSH

Что касается улучшений, это будет зависеть от того, какие данные из 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

1
22.12.2020, 02:19
2 ответа

Во-первых, чтобы повысить пропускную способность, вы можете включить Compressionв файле конфигурации. Поскольку, как правило, большая часть того, что передается, является текстом, между клиентом и сервером может быть сжата значительная полоса пропускания.

Во-вторых, вы можете изучить управляющие сокеты, которые повторно используют первое установленное соединение с системой. Это ускорит соединения, так как только один разрывается и устанавливается. Найдите ControlMaster, ControlPathи ControlPersistна справочной странице ssh_master(5).

В-третьих,вы можете попробовать запустить screen(1)или tmux(1)в удаленной системе, что позволит вам создавать там виртуальные вкладки и иметь возможность переключаться между ними, не открывая новых соединений ssh.

Наконец, попробуйте создать закрытые/открытые ключи SSH (c.f. ssh-keygenи ssh-agent), поэтому вы не используете пароли для входа в систему. Они более безопасны и будут использоваться для шифрования данных между двумя машинами (, которые вам также понадобятся ).

1
18.03.2021, 22:41

Возможно, это не лучший вариант, но если вы хотите пропустить обучение работе с мультиплексорами терминалов, такими как 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'

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

0
18.03.2021, 22:41

Теги

Похожие вопросы