Veja esta resposta relacionada .
Em suma, o SSH passa o que segue como uma string, não como uma lista de argumentos, então coloque-o entre aspas. E você pode querer inserir um &&
antes do último sudo.
Eu tenho duas máquinas que têm o mesmo conjunto de usuários em cada uma. Eu tenho um script em uma máquina que eu quero alterar a senha em ambas as máquinas.
Então, eu gerei uma senha aleatória, depois a chamo e a transmito para o comando usermod, assim:
usermod -p PASSWORD_HASH USER
ssh REMOTE_USER@REMOTE_HOST sudo usermod -p PASSWORD_HASH USER
O REMOTE_USER tem privilégios para executar o comando usando o sudo sem precisar de senha.
O resultado disso é que a senha foi alterada com sucesso na máquina local, o que posso verificar imediatamente ao tentar:
su USER
Eu também verifiquei o arquivo / etc / shadow, e parece que o hash está realmente armazenado corretamente.
No entanto, se eu pular para a outra máquina e tentar fazer o login como USER, não consigo entrar. Recebo um erro de autenticação. Se eu fizer login na máquina remota com privilégios de superusuário e verificar o arquivo / etc / shadow, o hash da senha ficará totalmente distorcido e não fará sentido.
No entanto, se, enquanto estiver nessa máquina remota, eu executar exatamente o mesmo comando sem passar por ssh, usando
sudo usermod -p PASSWORD_HASH USER
Então tudo funciona bem.
Minha pergunta:
Há algum detalhe aqui que estou perdendo que está fazendo com que o comando usermod NÃO trabalhe sobre o ssh por algum motivo?
Veja esta resposta relacionada .
Em suma, o SSH passa o que segue como uma string, não como uma lista de argumentos, então coloque-o entre aspas. E você pode querer inserir um &&
antes do último sudo.