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

관련 정보