我正在尝试通过将可以进行版本控制的 ssh 配置文件链接在一起来标准化跨项目的服务器别名。
我希望能够在一个地方(ssh 配置)定义机器别名以及 IP 地址和 ssh 密钥。这可以与基于 ssh 的实用程序(如/bin/ssh
和(我相信)scp)完美配合。您甚至可以获得制表符补全。
但是,如果我在 ssh 配置中设置别名,那么别名将无法用于 ping 和其他 vanilla 网络实用程序。我不想让我的 /etc/hosts 与 ssh 配置文件保持同步。
有没有办法
- 让 ssh 别名自动工作,就像它们在
/etc/hosts
? 或 - 找到一套使用活动 ssh 配置作为别名源的网络实用程序?
答案1
我编写了一个小型 shell 函数,可以完成同样的任务,并且可以将其放置在您的.bashrc
.
它会在调用原始的 之前替换ping
并查找 中的最后一个参数(主机),即,将调用 中匹配的 IP/主机名在哪里。如果在文件中未找到与最后一个参数匹配的主机,则使用原始值,与标准 一样。.ssh/config
/bin/ping
ping -c 2 <host>
/bin/ping -c2 <hostname>
<hostname>
.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 主机名