Seu comando imprime os resultados stderr ou stdout?
Você pode redirecionar stderr
para stdout
usando
OUT=$(ssh -tt -vv [email protected] "remote command" 2>&1 )
Esta questão está diretamente relacionada a esta: ssh falha ao executar comando remoto quando executado a partir do script cron bash - funciona a partir do CLI
Não posso comentar a resposta aceita, pois não tenho representante suficiente, por favor, tenha paciência comigo.
Estou executando um script em uma máquina Linux PC e o host que eu estou tentando obter a saída é um roteador com o seu sistema operacional, então não é nada que eu possa influenciar em termos de configuração do console. Basicamente executando isso no cron:OUT=$(ssh -tt -vv [email protected] "remote command")
me obtém uma variável vazia.
debug1: Sending command: remote command
debug2: channel 0: request exec confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 2621440 rmax 262144
debug2: channel 0: read<=0 rfd 4 len 0
debug2: channel 0: read failed
Se eu estiver executando este cron externo, ou seja, na CLI, estou recebendo a saída conforme o esperado. Como você pode ver, a opção -tt para forçar a alocação pseudo-tty não ajuda.
Alguma solução para isso ajuda o cron a superar o console remoto com bugs?
Seu comando imprime os resultados stderr ou stdout?
Você pode redirecionar stderr
para stdout
usando
OUT=$(ssh -tt -vv [email protected] "remote command" 2>&1 )
Você considerou usar caminhos totalmente qualificados para o cronjob?
Use /usr/bin/ssh user@host
em vez de ssh user@host
Alguns roteadores ou dispositivos incorporados têm implementações SSH muito ruins. Já vi casos em que eles só sabem ler comandos do console e não conseguem lidar com comandos passados na linha de comando. Se este for o seu caso, você pode querer tentar colocar o comando remoto no ssh remoto.
echo remote command | ssh user@host
Se isso ajudar, talvez você tenha mais sorte tentando codificar algo com expect
.