SSH no SSH no shell script

4

Não tenho certeza se tenho a capacidade de testar isso agora, mas queria saber se alguém poderia informar se é possível fazer algo assim:

Run a shell script
    Shell Script SSH's into a machine (Connection requires SSH key only)
        Stuff is run on that machine
        Script run on that machine SSH's into another machine (Connection requires SSH key and password)
            Stuff is run in that machine
            Exit from that machine
        Stuff is run in that machine
        Exit from that machine
    More stuff happens for a few hours

Presumivelmente, é apenas um caso de montar o nível requerido de script e deixá-lo rodar? Para roubar um exemplo de outra pergunta do SoF:

sshScript='
    ls -la
    sshScript2='
        ls -la
    '
    ssh -t ${UserName}@server "${sshScript2}"
    ls -la
'
ssh -t ${UserName}@server "${sshScript}"

Onde, no caso de coisas do sudo, apenas corro sudo -s -u user bash -c script ou o que seja?

Não tenho certeza se isso resultará em um loop infinito e, como as máquinas às quais estou me conectando estão em um ambiente de produção, não posso correr o risco de quebrá-las para fins de teste.

    
por XtrmJosh 26.08.2015 / 16:48

3 respostas

4

Sim. É possível. Mas se o seu script for mais longo, recomendo fazer isso em mais comandos usando ControlMaster , como o Ansible faz, senão você se perderá em todas as aspas, barras invertidas e coisas que você pode ver na sua postagem.

scp script1.sh remote:/tmp/
ssh remote "bash /tmp/script.sh"

e seu script.sh pode conter mais um lote semelhante da máquina remota para outra. Além disso, o script pode conter rm /tmp/script.sh para se limpar sozinho.

    
por 26.08.2015 / 16:58
4

Nesse caso, costumo usar heredoc para alimentar um script para shell remoto. Não utilizável quando o script requer entrada do usuário a partir de stdin.

ssh ${UserName}@server <<EOF1
ls -la
ssh ${UserName}@server <<EOF2
ls -la
EOF2
ls -la
EOF1
    
por 26.08.2015 / 18:04
2

Sugiro usar a opção " -q -o "BatchMode=yes" ", bem como a autenticação de chave pública .

Pense também em citar um único comando que gostaria de executar no servidor remoto para evitar qualquer problema relacionado a uma possível interpretação local do comando fornecido.

Por exemplo: ssh -q -o "BatchMode=yes" user@server 'ls -al'

Esta é uma técnica bastante comum (ssh aninhado). Não há problema em implementar isso.

    
por 26.08.2015 / 18:13

Tags