Esta é uma questão clássica de citação.
Problema: Sem citar ou dobrar a substituição do comando ( $()
) e a expansão da variável (o $
s na senha hash retornada por openssl
está sendo tratado como indicador variável ) estão sendo feitos no ambiente local, não no shell remoto.
Solução: use aspas simples ao redor do comando useradd
usado com ssh
no shell local para evitar a substituição de comandos e a expansão de variáveis no ambiente local, permita que as expansões ocorram no remoto shell não-login, não interativo:
ssh [email protected] 'useradd -p "$(openssl passwd -1 1234)" newuser'
Observe as citações.
Problemas de segurança:
-
O login do SSH
root
deve ser desativado, se você precisar ativá-lo somente a autenticação baseada em chave deve ser permitida -
O MD5 já está quebrado e, sem sal, você está sujeito a um simples ataque de mesa do tipo Arco-Íris (nem precisa de força bruta / ataque de dicionário);
openssl passwd
gera um sal aleatório. De qualquer forma, você deve realmente considerar o uso de SHA-2 com salt-ing -
Senhas passadas como argumentos para comandos podem estar visíveis para outros processos no sistema (remoto); isso depende de como o
procfs
está montado (veja emhidepid
) e se o comando está sendo reescrito (neste caso, presumivelmente não)