Как установить имя пользователя по умолчанию, которое будет использоваться в псевдониме ssh?

Возможно, я не в себе, но это выглядит просто, если вы просто хотите посчитать.

 awk '{print $1}' access.log |uniq |wc -l

Это выведет количество из одного файла. Если вам нужны все из них, вы можете zgrep их всех и использовать ужасное регулярное выражение IP-адреса:

zgrep '\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)\.\(25[0-5]\|2[0-4][0-9]\|[01][0-9][0-9]\|[0-9][0-9]\)' access.log.*.gz | awk '{print $1}' | uniq |wc -l

Конечно, держу пари, что есть гораздо более простой способ, который вам может дать какой-нибудь умный человек, но для меня это немного рано утром, я просто выбрасываю это решение. Протестировано на моем веб-сервере с nginx, он работает с моими 50+ лог-файлами.

Согласно OP, если у вас нет zgrep, вы можете сначала запустить файлы журнала через gzip...

ОП отметил в другом сообщении, что это сработало для него. Это также взято из решения msp9011, так что отдаю должное.

cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |sort -nr

ОП хотела бы, чтобы решение печатало строки с более чем 100 запросами. Думаю, это можно сделать одним awk-выражением, но я сделаю это методом грубой силы:

  cat access.log | awk '{a[$1]++} END {for(i in a) print a[i],i}' |awk '$1>100' | sort -nr
0
21.01.2021, 12:58
3 ответа

Возможно, вы могли бы установить имя пользователя с помощью переменной и вернуться к значению по умолчанию:

myssh() {
  ssh -o "User=${user:-somebody}" "$@"
}

И использовать так:

myssh server  # use default user
user=root myssh -v server  # use root as the username
4
18.03.2021, 22:35

Не используйте псевдоним, просто настройте свой ssh-клиент. Отредактируйте (или создайте, если его нет)~/.ssh/configи добавьте эти строки:

Host rootServer
HostName server_to_connect_to
User root

Host userServer
HostName server_to_connect_to
User somebody

Сохраните файл, и теперь вы можете запустить ssh rootServerдля подключения как rootи ssh userServerдля подключения как somebody.

5
18.03.2021, 22:35

Я могу создать временный файл и передать его в sshв качестве конфигурации с -Fс добавленным к нему Host * User somebody.

myssh() {
    (
        # in a subshell, so that `trap` will not affect parent
        local tmp
        tmp=$(mktemp --tmpdir.cis-ssh-config.XXXXXXXXXXX)
        trap 'rm "$tmp"' exit
        {
            printf "%s\n" "Host *" "  User somebody"
            # silence errors, if the files doesn't exists
            cat /etc/ssh/ssh_config ~/.ssh/config 2>/dev/null ||true
        } > "$tmp"
        ssh -F "$tmp" "$@"
    )
}
-1
18.03.2021, 22:35

Теги

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