Você pode verificar se stdin
é um terminal antes de usar stty
:
if [[ -t 0 ]]; then stty -echo; fi
Eu tenho um script bash onde eu uso ssh
para se conectar a outro servidor e executar alguns comandos lá. Eu encontrei alguns sites que o erro ( Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
) é uma mensagem amigável, mas meu script bash fica "preso". Nenhum outro comando é executado após essa mensagem aparecer. Outros fóruns disseram para usar ssh -t
para suprimir a mensagem, mas ela não funciona para mim. Meu código é parecido com isto:
.
.
.
stty -echo
sshpass "pwd" ssh -o StrictHostKeyChecking=no [email protected] 'su -lc "rm -rf tmp"' 2>/dev/null
stty echo
.
.
.
A razão pela qual eu estou usando stty-echo
é porque eu preciso mudar os usuários para root e a senha é exibida no terminal (o que eu não quero). Eu recebo a mensagem de erro ( Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.
) depois de digitar a senha para root no servidor de conexão (ip: 1.1.1.1).
Alguma sugestão? Deixe-me saber se mais explicações são necessárias. Obrigado! (Minha versão do bash é GNU bash versão 3.2.51 (1))
EDITAR
A mensagem de erro que recebo quando removo 2>/dev/null
é:
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
stty: standard input: Invalid argument
Você pode verificar se stdin
é um terminal antes de usar stty
:
if [[ -t 0 ]]; then stty -echo; fi
Em vez de tentar esconder com segurança sua senha e root do terminal, por que não usar um par de chaves ssh? Se você executar o comando ssh-keygen
, poderá gerar uma chave crypto.pub que, se você colocar no arquivo /root/.ssh/authorized_keys
de cada host remoto, poderá simplesmente executar seu comando da seguinte forma: ssh [email protected] "rm -rf tmp"
. Dessa forma, você não precisa sempre digitar sua senha novamente. O comando, se você quiser, também pode ser adicionado ao crontab e definido em uma programação regular, para que você possa gastar seu tempo fazendo outras coisas. Tudo isso presumindo que a máquina da qual você está gerando a chave, somente você tem acesso ou, para ser mais claro, a conta de usuário na máquina da qual você está gerando a chave não é uma conta compartilhada entre você e um usuário sudo. usuário não-sudo.
Se isso ajudar, mas precisar de uma explicação melhor, avise-nos e tentarei adicionar mais informações à minha resposta.
Isso pode ajudar se você nunca gerou um par de chaves antes: