O script Bash parece nunca completar

0

Estou escrevendo um script que deve definir permissões em um arquivo de chave privada e ssh-add, para que seja utilizável posteriormente:

echo "Setting up the private SSH key..."

if [[ $EUID > 0 ]]; then
  echo "This script needs to be run as root/sudo"
  exit 1
fi

#CmdLine Argument Parsing
for i in "$@"; do
    case $i in
        -k=*|--key=*)
        KEY="${i#*=}"
        ;;
    esac
done

if [ ! -e "$KEY" ]; then
    echo "Error: The private key file $KEY does not exist"
    exit 1
else
    echo "Private key found..."
fi

sudo chmod 600 $KEY
echo "Private key permissions set..."

exec ssh-agent bash
eval 'ssh-agent -s'

echo "SSH Agent restarted..."
sudo ssh-add $KEY
echo "SSH Key added..."
echo "...done"

O script está sendo executado por meio de: sudo bash ./myscript.sh --key=~/.ssh/mykey-rsa . O script parece nunca ser concluído, sendo o último eco observado "Conjunto de permissões de chave privada ...".

Alguém pode explicar o que há de errado com esse script e como devo corrigi-lo para que ele funcione como pretendido?

Atenciosamente

    
por Maciek 06.04.2017 / 18:13

1 resposta

1

A linha exec ssh-agent bash inicia um novo processo que aguarda a entrada do usuário. Os comandos que seguem esta linha não serão executados até que ssh-agent process seja concluído.

Se você quiser que ssh-agent bash execute alguns comandos, você deve passá-los para o canal intput padrão da seguinte forma:

echo 'echo "hello world"' | ssh-agent bash

Desta forma, ssh-agent executará os comandos enviados a partir de stdin e finish. E os seguintes comandos serão executados posteriormente.

EDITAR: @ 8bittree observou corretamente no comentário que exec na verdade não inicia um novo processo e em vez disso substitui o programa atual no processo atual por um novo programa, então as linhas após este comando não seriam executadas sob nenhuma circunstância.

    
por 07.04.2017 / 02:17