Tente isto:
perl -0ne 'print $& if /^Host.*?IdentityFile\s+\K[^\n]+/ms' file
Gostaria de extrair uma configuração para um determinado host no arquivo ssh_config e colocá-lo em uma variável.
Host mysite
HostName 123.1.1.1
User myuser
Port 13245
GSSAPIAuthentication no
IdentityFile /home/myuser/.ssh/id_dsa
Host anothersite
HostName 321.2.2.2
User myuser
Port 22
GSSAPIAuthentication no
IdentityFile /home/myuser/.ssh/anothersite_dsa
Eu preciso corresponder a primeira ocorrência do valor para a configuração dada depois que o nome do host tiver sido correspondido primeiro. Acabei de começar a aprender regex básico e isso é tão longe quanto eu comecei por conta própria, mas eu tenho muito tempo para isso e poderia usar alguma ajuda. O script encontra a primeira ocorrência de "IdentityFile" depois de coincidir com "Host mysite" e substituir a palavra "IdentityFile" por "test".
IDF="IdentityFile"
HOST="mysite"
get_host_option() {
option="$IDF"
[ -f /etc/ssh/ssh_config ] || return
perl -0pe 's/(?<=Host[[:space:]]'"$HOST"')(.*?)'"$option"'/$1test/s' /etc/ssh/ssh_config
}
get_host_option "$IDS"
O que eu preciso é o caminho que foi definido para o IdentityFile ser colocado em uma variável. Então eu poderia nos fazer assim.
ssh-add $IDPATH