4

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

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

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

Есть ли способ либо

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

?

1 ответ1

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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .