从 Supperputty XML 文件生成 ssh 主机配置文件

从 Supperputty XML 文件生成 ssh 主机配置文件

我正在构建一个脚本,该脚本从 Supperputty XML 会话配置文件生成 ssh 配置文件。我不知道哪个工具可以更好地处理它。我尝试使用 awk 来实现它,但我没有收到预期的结果,因为字段永远不会相同。

输入文件:

<SessionData SessionId="DMZ contoso.prod.net" SessionName="amq01.contoso.prod.net" ImageKey="computer" Host="amq01.contoso.prod.net" Port="22" Proto="SSH" PuttySession="[webserver]-[EL]# PROD | xx" Username="user" ExtraArgs="" SPSLFileName="" />
<SessionData SessionId="Build und Deploy/[Websphere]-[IR]# Deploy" SessionName="[Websphere]-[Internal]# Deploy" ImageKey="computer" Host="deploy.contoso.prod.net" Port="22" Proto="SSH" PuttySession="[Websphere]-[internal]# Deploy" Username="usa" ExtraArgs="" SPSLFileName="" />
<SessionData SessionId="ImportedFromPuTTY/[DP]-[DMZ]# PROD | 01" SessionName="[DP]-[DMZ]# PROD | 01" Host="192.168.1.91" Port="2354" Proto="SSH" PuttySession="[DP]-[DMZ]# PROD | 01" Username="schnipi" SPSLFileName="" />

预期输出:

#short info
Host Hostfromfile
  HostName amq01.contoso.prod.net
  User user
  Port 22

我已经尝试过一些方法,但只有第三种方法有效,因为 SessionId 始终保持在相同的位置:

        awk 'if ( $2 ~ /SessionId="/,/\/"/ ) {print "#Test "$2}
        awk -F '="' '{print($2 == /SessionId/) "#Test " $2 ""}' session >> Test.conf
        awk -F '="' '{print "#Description: " $2 "\n" }' session >> Test.conf
        awk -F '="' '/SessionId=/ {for (a=1;a<=NF;++a) if ($a~/SessionId=/) print "# " $a "\n"} ' session >> config

我不知道如何只输出引号之间的匹配而不输出引号。

答案1

尝试这个,

IFS=$'\n'
for i in `cat file.xml`
do
        echo "$i" | awk -F '"' '{print "#Discription: " $2 "\nHost internal\n  HostName " $8"\n  User " $16 "\n  Port "$10 }'
done

我得到的输出为:

#Discription: DMZ contoso.prod.net
Host internal
  HostName amq01.contoso.prod.net
  User user
  Port 22
#Discription: Build und Deploy/[Websphere]-[IR]# Deploy
Host internal
  HostName deploy.contoso.prod.net
  User web
  Port 22

相关内容