Я пытаюсь стандартизировать псевдонимы серверов во всех проектах, связав вместе файлы конфигурации SSH, которые я могу хранить под контролем версий.
Я хотел бы иметь возможность просто определять псевдонимы машин вместе с IP-адресами и ключами ssh в одном месте (конфигурации ssh). Это прекрасно работает с утилитами на основе ssh, такими как /bin/ssh
и (я полагаю) scp. Вы даже получаете автодополнение по табуляции.
Однако, если я устанавливаю псевдонимы в своей конфигурации ssh, то псевдонимы не будут доступны для ping и других ванильных сетевых утилит. Я не хочу, чтобы мои /etc/hosts были синхронизированы с моими файлами конфигурации ssh.
Есть ли способ сделать это?
- заставить псевдонимы ssh автоматически работать так, как если бы они были в
/etc/hosts
? или - найти набор сетевых утилит, который использует активную конфигурацию 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 имя хоста