while IFS= read -r line
do
array[${#array[*]}]="$line"
done <file
Por lo general, esto se puede hacer con expect
. Puede hacer que recupere la contraseña del entorno, pásela a base64
y recupere la salida. Luego genere el ssh, espere el indicador $
del shell y envíele el comando sudo
. Cuando se vea la solicitud de contraseña de sudo, envíe la contraseña decodificada, luego continúe dentro de lo esperado de la manera habitual con interact
. Coloque lo siguiente en un archivo y hágalo ejecutable, luego llámelo con su nombre de host como argumento.
#!/usr/bin/expect -f
# https://unix.stackexchange.com/a/422651/119298
log_user 0
spawn base64 -d
send $env(mypword)\n\x04
expect -nobrace -re "\n(.+)$"
close
set output $expect_out(1,string)
spawn ssh -q -t [lindex $argv 0]
expect {$ }
send "sudo echo hi\n"
expect -nobrace -re {.sudo. password.*:}
send "$output\n"
expect "\n"
interact