shell scripts comandos remotos através do ssh

3

Estou tentando criar um script de shell que executará alguns comandos que eu preciso freqüentemente. Eu fiz o login ssh para pular o prompt de senha usando um par de chaves pública / privada. e depois de alguma pesquisa, eu sou capaz de executar alguns códigos como:

Arquivo: ssh.sh

ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c
EOF

Mas eu não vejo nenhuma diferença se eu colocar como:

ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c &
EOF

O & não faz nenhuma diferença. Com & , geralmente após a execução do gedit, ele será enviado para o segundo plano e o prompt virá. Mas eu não estou recebendo o prompt após o gedit. (Embora o que estiver na próxima linha esteja sendo executado. Como se eu colocasse echo "Hello" , ele mostraria Hello .)

O que há de errado aqui? Existe algum outro método? Eu quero fazer um SSH e executar algum comando através do shell script. Mas eu não quero sair depois que o script de shell termina sua execução. Eu quero sair manualmente depois de executar alguns dos meus próprios comandos que não são repetitivos como o script acima.

    
por RatDon 19.05.2015 / 10:27

2 respostas

3

Sem & , o script que você está executando remotamente diz "mude para /root/myDir , execute gedit e aguarde a saída". A variante com & diz para não esperar que gedit saia. De qualquer forma, o shell é encerrado depois de executado o último comando no script.

Se você deseja executar um script e, em seguida, executar mais comandos que você digita interativamente, é necessário executar um shell interativo no final.

ssh -Xt [email protected] 'cd /root/myDir && gedit a.c b.c; exec bash'

A opção -t diz ao SSH para configurar um terminal virtual no servidor; por padrão, não faz isso quando você passa um comando remoto para executar. exec bash no final diz ao shell para se substituir por uma nova instância do bash, que será um shell interativo (mostrando um prompt, escutando seus comandos, etc.), já que sua entrada está vindo de um terminal.

    
por 20.05.2015 / 00:51
0

Você pode definir um function e, em seguida, executá-lo sobre ssh .

#!/bin/bash
ssh_func(){

    cd /root/myDir
    gedit a.c b.c
}

ssh -X [email protected] "$(typeset -f); ssh_func"

typeset -f exibirá as funções definidas no script.

    
por 19.05.2015 / 10:47