Estou automatizando a geração de chaves com ssh-keygen
(OpenSSH v8.9), em um servidor headless. Isso é direto se nenhuma senha for necessária, mas fica difícil se você precisar de uma senha. ssh-keygen
precisa de 3 coisas no stdin ao gerar uma nova chave: y
, porque o arquivo de chaves já existe, e a senha necessária, repetida duas vezes.
Com alguma simplificação, estou fazendo isso da seguinte maneira:
$ printf -v input "y\npassword\npassword\n"
$ echo -n "$input"
y
password
password
$ echo -n "$input" | ssh-keygen -t ed25519 -a100 -f tmpkey
Quando fiz isso inicialmente, obtive esta saída:
Generating public/private ed25519 key pair.
tmpkey already exists.
Overwrite (y/n)? ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
O par de chaves foi criado, mas a chave privada não foi criptografada. Então, eu instalei ssh-askpass
, em um sistema de teste com X. Quando eu executo ssh-keygen
agora, eu recebo um pop-up de autenticação OpenSSH, e stdin agora é ignorado. Obviamente, eu não posso ter um pop-up gráfico em um servidor headless, mesmo se eu quisesse.
Então o que está acontecendo? Posso persuadir ssh-keygen
a automatizar a entrada de senha? Se não, posso usar openssl
para adicionar uma senha ou até mesmo criar o arquivo? Eu quero obter uma chave de formato OpenSSH disso - já estou automatizando o PKCS#8 com o openssl.
EDITAR
Eu encontrei o SSH_ASKPASS_REQUIRE
envvar para ssh
(não ssh-keygen
). Se eu configurá-lo para 'never', ele para o ssh-askpass
popup, mas ssh-keygen
agora lê apenas a primeira linha de stdin e ignora a senha nas próximas duas linhas. Então, não me leva a lugar nenhum.