Isso provavelmente se deve à sua PATH
... tentativa de especificar o caminho completo para psshutdown
ou date
.
A sessão SSH, sem shell ou PTY, provavelmente terá um PATH
set muito básico ...
Estou criando dois scripts Bash no meu Raspberry Pi, que está executando a distribuição Linux padrão baseada no Debian: um para dormir no meu computador desktop e outro para desligá-lo.
O script para desligar o computador funciona bem e seu conteúdo é:
sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "shutdown /s"
Minha área de trabalho está executando o Windows 10 e o servidor SSH integrado que vem com o Windows 10.
Quando tento executar o script para dormir no meu computador, no entanto, sou apresentado à saída:
Packet integrity error (165 bytes remaining) at ../channels.c:2401
Disconnecting: Packet integrity error.
O conteúdo deste script é:
sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "psshutdown /d"
'psshutdown' refere-se ao utilitário Windows Sysinternals .
Estranhamente, executar o comando psshutdown /d
em um prompt de comando do administrador, quando estiver na minha área de trabalho, acomoda meu computador com êxito. Ele também funciona se eu me conectar via SSH a partir do Pi sem especificar um comando para executar uma vez conectado, ou seja, sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME
e, em seguida, executar o comando psshutdown /d
. Executar o mesmo comando do script diretamente no Bash falha com a mesma saída acima.
Curiosamente, ao tentar executar alguns outros comandos da mesma maneira que no script de suspensão, alguns trabalham e alguns lançam um erro diferente. Por exemplo, sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "whoami"
funciona bem e retorna a saída correta, mas sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "date"
produz a saída exec request failed on channel 0
O que está causando falha no script de suspensão e como posso resolver o problema para executar com êxito o comando no SSH?
Nota: Eu entendo que não é ideal armazenar a senha do SSH em texto simples em um arquivo de script, mas configurar a autenticação baseada em chave no servidor SSH integrado é um desafio para outro dia.
Tags command-line ssh bash linux sysinternals