给定主机名,从〜/ .ssh / config获取主机

时间:2019-03-16 14:26:25

标签: awk ssh

是否有办法从给定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 吗?

3 个答案:

答案 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

第二个解决方案: 在此处将tacawk一起使用。

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