是否有办法从给定Host
的{{1}}中获取.ssh/config
?例如
Hostname
如果我知道主机,则可以获取主机名,如下所示:
Host foo
Hostname 111.11.111.111
User root
Port 22
有什么办法反之吗?我知道IP(111.11.111.111),但想获取~|> ssh -G foo | grep -E '\bhostname ' | cut -d " " -f 2
111.11.111.111
吗?
答案 0 :(得分:3)
请尝试以下操作,再添加一个从〜/ .ssh / config文件获取主机名的方法。
第一个解决方案: :已在GNU awk
中进行了测试。
awk -v ip="111.11.111.111" -v RS="" '$3=="Hostname" && $4==ip && $1=="Host"{print $2}' ~/.ssh/config
OR
awk -v ip="111.11.111.111" -v RS="" '
$3=="Hostname" && \
$4==ip && \
$1=="Host"{
print $2
}' ~/.ssh/config
第二个解决方案: 在此处将tac
与awk
一起使用。
tac ~/.ssh/config | awk -v ip="111.11.111.111" '$1=="Hostname" && $NF==ip{getline;if($1=="Host"){print $2;exit}}'
答案 1 :(得分:1)
ssh -G
似乎期望一个主机,但是您可以尝试自己解析配置文件。这样的事情似乎可以在我的系统上运行:
awk -v h="111.11.111.111" \
'$1 == "Host" {r = $2} \
$1 == "Hostname" && $2 == h {print r; exit}' \
~/.ssh/config
当然,这非常脆弱,例如,如果某个条目缺少Hostname
字段
答案 2 :(得分:1)
$ awk -v ip='111.11.111.111' '{f[$1]=$2} $1=="Hostname" && $2==ip{print f["Host"]}' file
foo