Usando ssh no script do cron

2

Eu tenho um problema ao executar um ssh de crontab contra um dispositivo de armazenamento Fujitsu DX200.

Ao executar o comando a partir do terminal tudo funciona bem conectando usando chaves RSA, mas quando eu incorporar o comando em um script e executá-lo do cron ele falha com "Pseudo-terminal não será alocado porque stdin não é um terminal."

O comando é ssh user@dx200 "show performance -type host-io"

De acordo com muitos artigos na net, adicionando um número de -t como um argumento para o ssh, ele deve forçar a alocação de PTY. No RedHat, onde o script foi desenvolvido, ele funciona adicionando -t -t -t (ou -ttt ), mas esse não é o caso quando rodando no Ubuntu.

Usar ssh -T (Desabilitar alocação pseudo-tty) faz com que o login no dx200 falhe com "FUJITSU Storage O login ETERNUS é necessário ..." - isto é, não efetuar login com a chave RSA.

Outras soluções da rede, usando variantes de ssh ... /bin/bash <<EOF ... , não são possíveis porque não podemos lançar um shell no dispositivo de armazenamento.

Alguma idéia de como contornar esse problema?

    
por Soren A 03.05.2018 / 11:35

1 resposta

1

Respondendo a minha própria pergunta ...

Adicionando um argumento -t extra ao ssh resolveu o problema.

O comando agora parece com ssh -t -t -t -t user@dx200 ...... ( -tttt deve fazer o mesmo).

A página man no ssh diz isso sobre -t:

 -t      Force pseudo-tty allocation.  This can be used to execute arbi-
         trary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

Mas nada sobre quantos 'Multiple' é, ou o que no código ssh que controla o número de opções -t necessárias.

    
por Soren A 04.05.2018 / 11:22