Alterando o diretório de saída ao recriar chaves de host SSH com ssh-keygen (a opção -f não impede que ssh-keygen grave em /etc/ssh/)

Alterando o diretório de saída ao recriar chaves de host SSH com ssh-keygen (a opção -f não impede que ssh-keygen grave em /etc/ssh/)

Estou tentando iniciar um processo sshd adicional em uma máquina remota. Criei um diretório de trabalho com o novo arquivo de configuração sshd que gostaria de usar.

Quando tento executar o sshd usando o arquivo de configuração neste diretório, ele reclama que não consegue encontrar nenhuma chave de host. Tentei criar chaves de host ausentes executando ssh-keygen -Aa -fopção para especificar o local do meu diretório de trabalho, mas o ssh-keygen continua tentando colocar as chaves /etc/ssh/em vez do diretório que especifiquei. Não tenho acesso ao /etc/ssh, então ele falha.

Como posso gerar essas chaves sem acesso a esse caminho?

Responder1

A -Aopção diz ssh-keygenpara gerarchaves de host. De acordo com a página do manual, o uso pretendido ssh-keygené

Normalmente , cada usuário que deseja usar SSH com autenticação de chave pública executa
isso uma vez para criar a chave de autenticação em ~/.ssh/identity, ou .
~/.ssh/id_ecdsa~/.ssh/id_dsa~/.ssh/id_rsaAdicionalmente, o administrador do sistema poderá usar isso para gerar chaves de host.

A sinopse lista -Asozinho uma linha, sem outras opções:

SYNOPSIS
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment]
                [-f output_keyfile]
     ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
     ssh-keygen -i [-m key_format] [-f input_keyfile]
     ssh-keygen -e [-m key_format] [-f input_keyfile]
     ssh-keygen -y [-f input_keyfile]
     ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
     ssh-keygen -l [-f input_keyfile]
     ssh-keygen -B [-f input_keyfile]
     ssh-keygen -D pkcs11
     ssh-keygen -F hostname [-f known_hosts_file] [-l]
     ssh-keygen -H [-f known_hosts_file]
     ssh-keygen -R hostname [-f known_hosts_file]
     ssh-keygen -r hostname [-f input_keyfile] [-g]
     ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
     ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-K checkpt]
                [-W generator]
     ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals]
                [-O option] [-V validity_interval] [-z serial_number] file ...
     ssh-keygen -L [-f input_keyfile]
     ssh-keygen -A

Portanto (além de modificar o código-fonte e compilá-lo você mesmo), o que você está perguntando não é o uso pretendido.

Leitura adicional:

Responder2

De acordo com a página de manual à qual Thomas está vinculado, -fagora é suportado ssh-keygen -Ae especifica um prefixo para os arquivos, então parece que esse recurso foi adicionado.

-A

Gere chaves de host de todos os tipos de chave padrão ( rsa, ecdsae ed25519) se ainda não existirem. As chaves do host são geradas com o caminho do arquivo de chave padrão, uma senha vazia, bits padrão para o tipo de chave e comentário padrão. Se -ftambém tiver sido especificado, seu argumento será usado como prefixo para o caminho padrão dos arquivos de chave do host resultantes. Isso é usado /etc/rcpara gerar novas chaves de host.

Observaçãoque as etc/sshpastas devem existir na pasta de saída antes da execuçãossh-keygen

$ mkdir -p output/etc/ssh

$ ssh-keygen -A -f output
ssh-keygen: generating new host keys: RSA ECDSA ED25519

$ ls output/etc/ssh/
ssh_host_ecdsa_key  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key  ssh_host_ed25519_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub

Responder3

Se você tiver acesso ao docker, e é por isso que eu queria fazer isso, para criar uma nova chave de host persistente que ficaria fora do contêiner, usei o seguinte:

docker run -d --name get_host_keys lscr.io/linuxserver/openssh-server:latest
sleep 5
docker cp get_host_keys:/etc/ssh/. .
rm *config*
docker stop get_host_keys
docker rm get_host_keys

informação relacionada