Существует ли утилита для пингования сервера с использованием псевдонимов в конфигурации ssh (вместо /etc/hosts)?

Существует ли утилита для пингования сервера с использованием псевдонимов в конфигурации ssh (вместо /etc/hosts)?

Я пытаюсь стандартизировать псевдонимы серверов во всех проектах, связав вместе файлы конфигурации SSH, которые я могу хранить под контролем версий.

Я хотел бы иметь возможность просто определять псевдонимы машин вместе с IP-адресами и ключами ssh в одном месте (конфигурации ssh). Это прекрасно работает с утилитами на основе ssh, такими как /bin/sshи (я полагаю) scp. Вы даже получаете автодополнение по табуляции.

Однако, если я устанавливаю псевдонимы в своей конфигурации ssh, то псевдонимы не будут доступны для ping и других ванильных сетевых утилит. Я не хочу, чтобы мои /etc/hosts были синхронизированы с моими файлами конфигурации ssh.

Есть ли способ сделать это?

  1. заставить псевдонимы ssh автоматически работать так, как если бы они были в /etc/hosts? или
  2. найти набор сетевых утилит, который использует активную конфигурацию SSH в качестве источника псевдонимов?

решение1

Я написал небольшую функцию оболочки, которая делает именно это и может быть помещена, например, в ваш .bashrc.

Он заменяет pingи выполняет поиск последнего аргумента (хоста) в .ssh/configперед вызовом оригинального /bin/ping, т.е. ping -c 2 <host>вызовет /bin/ping -c2 <hostname>где <hostname>находится соответствующий IP/имя хоста в .ssh/config. Если в файле не найден хост, соответствующий последнему аргументу, используется исходное значение, как и в случае со стандартным ping.

ping()
{
    # Process args
    local i=0
    local options=""
    local host=""
    for arg
    do
        i=$(($i+1))
        if [ "$i" -lt "$#" ]
        then
            options="${options} ${arg}"
        else
            host="${arg}"
        fi
    done

    # Find host
    local hostname=$(awk "\$1==\"Host\" {host=\$2} \$1==\"HostName\" && host==\"${host}\" {print \$2}" "$HOME/.ssh/config")
    if [ -z "$hostname" ]
    then
        hostname="$host"
    fi

    # Run ping
    /bin/ping $options $hostname
}

решение2

pip3 установить sshping

затем sshping имя хоста

Связанный контент