我试图通过将我可以保持在版本控制之下的 ssh 配置文件链接在一起来跨项目标准化我的服务器别名。
我希望能够在一个地方(ssh 配置)定义机器别名以及 IP 地址和 ssh 密钥。这适用于基于 ssh 的实用程序,如 /bin/ssh 和(我相信)scp。您甚至可以完成制表符。
但是,如果我在 ssh 配置中设置了别名,那么 ping 和其他 vanilla 网络实用程序将无法使用这些别名。我不想让我的 /etc/hosts 与我的 ssh 配置文件同步。
有没有办法
a) 使 ssh 别名自动工作,就好像它们在 /etc/hosts 中一样。或 b) 找到一套使用活动 ssh 配置作为别名源的网络工具。
?
我写了一个小的 shell 函数,它确实可以做到这一点,并且可以放置在例如您的.bashrc.
它在调用原始 之前替换ping并查找最后一个参数(主机),即将调用where is 匹配的 IP/主机名。如果在文件中找不到与最后一个参数匹配的主机,则将使用原始值,就像标准一样。.ssh/config/bin/pingping -c 2 <host>/bin/ping -c2 <hostname><hostname>.ssh/configping
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
}
Run Code Online (Sandbox Code Playgroud)