parsing - Grab an IdentityFile from an ssh config based on a variable hostname via shell script -
i'm writing shell script need obtain identityfile ssh config file. ssh config file looks this:
host aaaa user aaaa identityfile /home/aaaa/.ssh/aaaafile identitiesonly yes pubkeyauthentication=yes preferredauthentications=publickey host bbbb user bbbb identityfile /home/aaaa/.ssh/bbbbfile identitiesonly yes pubkeyauthentication=yes preferredauthentications=publickey host cccc user cccc identityfile /home/aaaa/.ssh/ccccfile identitiesonly yes pubkeyauthentication=yes preferredauthentications=publickey i want obtain string following identityfile based on given hostname , put in variable. hostname provided shell variable called ${hostname}.
i able use answer @ bash extract user particular host ssh config file read config file , grep single specific identityfile based on single specific hostname, can't hang of passing variable awk.
so far i've tried
ssh_config="/home/aaaa/.ssh/config" # note aaaa hostname case key=$(awk '/^host aaaa$/{x=1}x&&/identityfile/{print $2;exit}' ${ssh_config}) echo "${key}" output: "/home/aaaa/.ssh/aaaafile" which works because i'm giving exact hostname parse. using
ssh_config="/home/aaaa/.ssh/config" hostname=aaaa key=$(awk -vcon="${hostname}" '/^host con$/{x=1}x&&/identityfile/{print $2;exit}' ${ssh_config}) echo "${key}" output: "" does not work. know fact ${hostname} being set because setting myself (and echoing it). pass variable because not want hostname hardcoded , not know value until script called.
i stuck using , older version of ssh (openssh_6.6.1) not have convenient ssh -g hostname option.
what missing when comes awk variables? there better way this?
with gnu grep , perl compatible regular expressions:
hostname="aaaa" grep -poz "host $hostname(.*\n)*?.*identityfile \k.*" ~aaaa/.ssh/config output:
/home/aaaa/.ssh/aaaafile
Comments
Post a Comment