Eu poderia resolver esse problema usando a opção -T
"Desativar alocação pseudo-terminal". e usando o scriptfiles sem a linha #!/bin/bash
, então comecei com
echo "check"
reboot
A situação:
Meu computador roda no Kubuntu 14.04.
Eu sou o administrador de uma casa de estudantes com alguns Netgear-APs.
A ideia é ter um script reiniciando todos eles por um script.
(ssh-key não é posible)
O problema em resumo:
O comando ssh no host é executado bem a partir do shell. Mas não se for executado por um script.
Descrição:
Eu tenho um script no meu computador: "caminho / para / localScript"
#!/bin/bash
echo "Hello mister"
reboot
agora se eu digitar o seguinte diretamente no meu shell
sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT
Eu recebo a saída
Pseudo-terminal will not be allocated because stdin is not a terminal.
Hello mister
Connection to HOST closed by remote host.
e o AP realmente é reiniciado! Eu tentei outros comandos (como ping) - > tudo funcionou bem. Agora eu quero fazer exatamente a mesma coisa, mas dentro de um script (então eu posso adicionar mais tarde todos os outros APs);)) Então eu tentei um script "rebootThemAll"
#!/bin/bash
echo " Rebooting AP 1"
sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT
Eu recebo a saída
Rebooting AP1
Pseudo-terminal will not be allocated because stdin is not a terminal.
e ... nada mais acontece. Mais uma vez vejo o meu prompt de entrada na linha da shell para que o script pare. Eu também tentei mais de 1 AP para ver se esse erro cancela o meu script, mas isso não aconteceu. Para mais APs, a saída se parece com isso
Rebooting AP1
Pseudo-terminal will not be allocated because stdin is not a terminal.
Rebooting AP2
Pseudo-terminal will not be allocated because stdin is not a terminal.
Rebooting AP3
Pseudo-terminal will not be allocated because stdin is not a terminal.
Rebooting AP4
......
mas o script não será executado. Não mostra o "Hello mister" e eles não estão reiniciando ..
Alguém tem uma ideia?
Eu poderia resolver esse problema usando a opção -T
"Desativar alocação pseudo-terminal". e usando o scriptfiles sem a linha #!/bin/bash
, então comecei com
echo "check"
reboot
Tente isto:
sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] 'bash -s' < PATH/TO/LOCALSCRIPT
Parece que o comando é necessário no caso de não haver nenhum terminal.