Awk 给定主机名,从~/.ssh/config获取主机
是否有一种方法可以从Awk 给定主机名,从~/.ssh/config获取主机,awk,ssh,Awk,Ssh,是否有一种方法可以从.ssh/config获取主机名?。比如说 Host foo Hostname 111.11.111.111 User root Port 22 如果我知道主机,我可以得到主机名,如下所示: ~|> ssh -G foo | grep -E '\bhostname ' | cut -d " " -f 2 111.11.111.111 有什么办法吗?维切维萨?我知道ip(111.11.111.111),但想获得foo?ssh-G似乎只需要一台主机,但您可以尝试自己解析
.ssh/config
获取主机名?。比如说
Host foo
Hostname 111.11.111.111
User root
Port 22
如果我知道主机,我可以得到主机名,如下所示:
~|> ssh -G foo | grep -E '\bhostname ' | cut -d " " -f 2
111.11.111.111
有什么办法吗?维切维萨?我知道ip(111.11.111.111),但想获得foo
?ssh-G
似乎只需要一台主机,但您可以尝试自己解析配置文件。在我的系统中,类似这样的东西似乎起作用:
awk -v h="111.11.111.111" \
'$1 == "Host" {r = $2} \
$1 == "Hostname" && $2 == h {print r; exit}' \
~/.ssh/config
当然,这是非常脆弱的,例如,如果某个条目缺少主机名
字段,请尝试以下操作,添加一个从~/.ssh/config文件获取主机名的选项
第一种溶液:在GNUawk
中制备和测试
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}}'
在这里使用nslookup
怎么样?使用类似于ssh-G的东西您的| ip | grep…
没有测试它,但尝试了一次,然后告诉我。@RavinderSingh13与ip不兼容-G导致ssh在评估主机和匹配块后打印其配置并退出。
据我所知……实际上我们为什么要在这里执行ssh
,您可以这样做nslookup ip\u address
然后让我知道吗?@RavinderSingh13:这不一定是等效的,Host
条目只是执行ssh foo
时记录的标识符,它不需要匹配DNS名称。
tac ~/.ssh/config | awk -v ip="111.11.111.111" '$1=="Hostname" && $NF==ip{getline;if($1=="Host"){print $2;exit}}'
$ awk -v ip='111.11.111.111' '{f[$1]=$2} $1=="Hostname" && $2==ip{print f["Host"]}' file
foo