A máquina A se conecta a uma máquina remota B usando sshpass
e a máquina remota B não concede ssh
acesso a root
diretamente, por isso, conecto-me a user
e uso sudo
e também desabilitou a senha para o user
quando ele faz sudo su
. Quando os comandos são simples, como ls -lrt /some/dir
, recebo a saída correta para o comando, mas quando inicio um script de servidor / shell na máquina remota (o servidor não leva tempo enquanto o script leva 1 minuto para ser executado), a saída é mostrada, mas não voltar ao normal (ou seja, parece que está fazendo algum trabalho, mas eu sei que o servidor foi iniciado / script foi concluído).
Comando usado:
sshpass -p 'password' ssh -o StrictHostKeyChecking=no [email protected] "sudo ls /dev/ttyUSB*"
acima funciona bem, eu recebo a saída e o bash é retornado para que eu possa escrever mais comandos e fazer coisas.
sshpass -p 'password' ssh -o StrictHostKeyChecking=no [email protected] "sudo /root/path/server &"
sshpass -p 'password' ssh -o StrictHostKeyChecking=no [email protected] "sudo /root/path/to/script/scriptTakes1Minute param1 param2"
Mas, o acima não funciona como esperado. Parece que está fazendo trabalho, mas não é o bash não é retornado e por isso não posso escrever comandos mais.
Eu não posso compartilhar o script ou o programa do servidor, pois é o código da empresa. Mas o código do servidor usa sockets de datagrama UNIX para se comunicar.
/* Creating a UNIX datagram socket for Server Application */
if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
{
perror("server: socket");
exit(1);
}
Quando tentei
sshpass -p 'password' ssh -o StrictHostKeyChecking=no [email protected] "sudo /root/path/server >/dev/null &2>1 </dev/null &"
o programa do servidor foi iniciado corretamente, mas o script não funcionou como esperado e não retornou o bash, mas assim que pressionei ENTER
o bash retornou, eu sei que significa algo, mas não sei o quê. / p>
Não consigo redirecionar a saída para um arquivo, pois não sei quanto tempo o comando levará para ser executado no total, isso pode levar alguns minutos.
Eu encontrei algo que vai ajudar muito (eu acho). O script que é mantido nessa máquina B cria poucos processos em segundo plano e, portanto, o sshpass
não retorna até que todos esses processos em segundo plano sejam eliminados manualmente da Máquina B. Assim que esses programas são eliminados, obtemos essa saída assim como o bash de volta.
O script cria 8 sessões ppp que são executadas em segundo plano.