|
|
@ -21,23 +21,23 @@ sshp() { |
|
|
|
_sshp_dest=$1 |
|
|
|
# create temporary directory |
|
|
|
_sshp_tmpdir=$(mktemp -d) |
|
|
|
mkfifo $tempdir/in $tempdir/out |
|
|
|
mkfifo $_sshp_tmpdir/in $_sshp_tmpdir/out |
|
|
|
_sshp_out=$_sshp_tmpdir/out |
|
|
|
# assign input to a file descriptor so it doesn't get closed |
|
|
|
exec {_sshp_in}<>$tempdir/in |
|
|
|
exec {_sshp_in}<>$_sshp_tmpdir/in |
|
|
|
# trap exit to do cleanup |
|
|
|
trap "{ exec {_sshp_in}>&-; ssh -O exit -S $_sshp_tmpdir/ssh $_sshp_dest &>/dev/null; rm -rf $tempdir; }" EXIT |
|
|
|
trap "{ exec {_sshp_in}>&-; ssh -O exit -S $_sshp_tmpdir/ssh $_sshp_dest &>/dev/null; rm -rf $_sshp_tmpdir; }" EXIT |
|
|
|
# login with master so ssh can ask password if necessary |
|
|
|
ssh -M -Nf -S $tempdir/ssh $_sshp_dest |
|
|
|
ssh -M -Nf -S $_sshp_tmpdir/ssh $_sshp_dest |
|
|
|
# login with redirection for the persistent connection |
|
|
|
ssh -S $tempdir/ssh medusa 0<&$_sshp_in 1>$_sshp_out 2>$_sshp_out & |
|
|
|
ssh -S $_sshp_tmpdir/ssh medusa 0<&$_sshp_in 1>$_sshp_out 2>$_sshp_out & |
|
|
|
# clear output |
|
|
|
sshp true &> /dev/null |
|
|
|
# ask for password and run sudo so password can be cached |
|
|
|
(printf "[sudo] password for $(remote echo \$USER)@$(remote hostname): " |
|
|
|
(printf "[sudo] password for $(sshp echo \$USER)@$(sshp hostname): " |
|
|
|
read -s password |
|
|
|
printf '\n' |
|
|
|
echo "sudo -S true" >&3 |
|
|
|
echo $password >&3) |
|
|
|
# clear output |
|
|
|
echo "sudo -S true" >&$_sshp_in |
|
|
|
echo $password >&$_sshp_in) |
|
|
|
# clear output again |
|
|
|
sshp true &> /dev/null |
|
|
|