SSH -MYTAG ocultando o script canalizado para a conexão ssh

0

Estou tentando passar um script em um host remoto sem obter as saídas de comando no console do Jenkins. um script de exemplo:

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
exit
END

produz a seguinte saída:

+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"

exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ 
[update@dispotest ~]$ exit
exit
Connection to dispotest closed.
Finished: SUCCESS

Minha principal questão é que a parte inteira entre os dois endssh será postada na saída do console de jenkins, até mesmo duas vezes. A primeira vez que eu acho que é para iniciar a sessão ssh e a segunda vez é dentro da sessão ssh. Isso faz com que encontrar o lugar certo para parecer quieto. Então eu estava esperando que alguém tenha uma idéia de como esconder o próprio script do console. Mas eu não quero silenciá-lo completamente. Ainda estou interessado na saída dos comandos em execução na sessão ssh.

Eu experimentei o > / dev / null alot. mas muitas vezes também a saída do eco ou o comando executado no shell para onde eu queria preservar.

alguns exemplos que eu tentei

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END

exibe pelo menos os comandos agrupados

+ sh start_stop_jboss_remote.sh
{

printf '%s world!\n' "$1"
exit

} 2> /dev/null
[update@dispotest ~]$ {
> 
> printf '%s world!\n' "$1"
> exit
> 
> } 2> /dev/null
hello world!
Connection to dispotest closed.
Finished: SUCCESS

exemplo 3

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' 2> /dev/null <<'END'
printf '%s world!\n' "$1"
exit
END

saídas

+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ exit
exit
Finished: SUCCESS

exemplo 4

ssh -o StrictHostKeyChecking=no -t -t update@dispotest  bash -s 'hello' 2> /dev/null <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END

saídas

+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
> printf '%s world!\n' "$1"
> exit
> } 2> /dev/null
hello world!
Finished: SUCCESS
    
por Severin N 12.06.2018 / 14:53

1 resposta

0

Você chama um shell de login interativo com -t -t . Remova-os da sua linha de comando.

A maneira correta de passar argumentos para um script bash -s é

bash -s "$COMMAND" "$SERVICENAME" <<'END_SCRIPT'
here goes
script that uses
"$1" and "$2"
END_SCRIPT

O script recebe os valores de $COMMAND e $SERVICENAME e estes estão disponíveis como $1 e $2 no script. O próprio script deve ser citado, o que é feito citando a tag here-document no início.

No seu caso:

ssh -o StrictHostKeyChecking=no "user@$SERVER"  bash -s "$COMMAND" "$SERVICENAME" <<-'ENDSSH'
        echo "I'd like to see this"
        if [ "$1" = "stop" ]; then
            ...
        fi
ENDSSH

Observe que a tag ENDSSH no final precisa estar na primeira coluna (primeiro na linha) ou recuada usando um caractere de tabulação.

Exemplo que funciona para mim:

ssh myhost bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
END

que produz a string hello world! no terminal.

    
por 12.06.2018 / 15:06