Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 给定主机名,从~/.ssh/config获取主机_Awk_Ssh - Fatal编程技术网

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文件获取主机名的选项

第一种溶液:在GNU
awk
中制备和测试

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