Eu tentei criar um usuário com senha via ssh (com permissão root) assim:
ssh [email protected] useradd -p $(openssl passwd -1 1234) newuser
Ao fazer isso, consegui criar uma conta chamada com êxito newuser
, mas não consegui entrar com a senha esperada (que é 1234
)
Não faz diferença se eu adicionar aspas duplas:
ssh [email protected] "useradd -p $(openssl passwd -1 1234) newuser"
E então eu queria saber se posso gerar uma senha com hash e salvá-la como uma variável localmente, mas ainda sem sorte.
password=$(openssl passwd -1 1234)
ssh [email protected] "useradd -p $password newuser"
Há algo que eu sinto falta? Desde já, obrigado!
command-line
ssh
password
users
amigcamel
fonte
fonte
Respostas:
Este é um problema clássico de cotação.
Problema: sem nenhuma citação ou citação dupla, a substituição de comando (
$()
) e a expansão de variáveis (os$
s na senha de hash retornada poropenssl
estão sendo tratados como indicador de variável) estão sendo feitos no ambiente local, não no shell remoto.Solução: use aspas simples em torno do
useradd
comando usadossh
no shell local para impedir a substituição de comando e a expansão variável no ambiente local, permita que as expansões ocorram no shell remoto, sem logon e não interativo:Observe as citações.
Problemas de segurança:
O
root
login SSH deve ser desativado, se você precisar ativá-lo, somente a autenticação baseada em chave deve ser permitidaO MD5 já está quebrado e, sem sal, você é submetido a um simples ataque à tabela Rainbow (nem sequer precisa de um ataque forçado / de dicionário);
openssl passwd
gera um sal aleatório embora. De qualquer forma, você realmente deve considerar o uso de SHA-2 com sal.As senhas passadas como argumentos para comandos podem ser visíveis para outros processos no sistema (remoto); isso depende de como o seu
procfs
é montado (vejahidepid
) e se o comando está se reescrevendo (neste caso, presumivelmente, não)fonte
crypt(3)
no Linux e marcado com o$1$
identificador não é o mesmo que o algoritmo de hash MD5 comum, da mesma maneira que os hashes$5$
e da$6$
senha não são simples como SHA-256 e SHA-512 . O método baseado no MD5 possui um número fixo de iterações, que é o maior problema com ele.Como observou @heemayl, o algoritmo de hash da senha MD5 está envelhecido e os sistemas atuais atualizam os hashes de senha mais recentes baseados em SHA-2, que possuem um fator de trabalho personalizável. Mas a ferramenta de linha de comando OpenSSL não parece suportá-las.
O
chpasswd
utilitário , no entanto, permitirá que você altere a senha de um usuário de acordo com as configurações do sistema.Isso deve permitir que você crie o novo usuário e altere sua senha no lado remoto.
chpasswd
pega o nome de usuário e a senha de stdin, não a linha de comando. Isso é realmente uma vantagem, pois os argumentos da linha de comando são visíveis para todos os outros processos no sistema; portanto, se executadosopenssl passwd
no controle remoto, a senha ficará momentaneamente visível para todos os processos no sistema.Não tenho certeza se existe um utilitário de linha de comando pronto para gerar hashes de senha conhecidos pela
crypt(3)
função do sistema . Perl tem acrypt
função embutida , mas um sal adequado ainda precisa ser gerado.fonte