Onde o agente SSH obtém os nomes que usa para chaves?

4

Não consigo entender como o agente SSH se refere às chaves que ele está usando.

Eu tenho quatro chaves SSH com os seguintes comentários:

$ tail -n +1 *.pub
==> github_id_ed25519.pub <==
ssh-ed25519 ... mygithubusername@myhost

==> id_ecdsa.pub <==
ecdsa-sha2-nistp521 ... me@myhost

==> id_ed25519.pub <==
ssh-ed25519 ... me@myhost

==> id_rsa.pub <==
ssh-rsa ... me@myhost

Eu adiciono essas chaves ao agente SSH (com a opção de confirmação -c ):

$ ssh-add -c github_id_ed25519 id_ecdsa id_ed25519 id_rsa
Enter passphrase for github_id_ed25519 (will confirm each use): 
Identity added: github_id_ed25519 (mygithubusername)
The user must confirm each use of the key
Identity added: id_ecdsa (id_ecdsa)
The user must confirm each use of the key
Identity added: id_ed25519 (me@myhost)
The user must confirm each use of the key
Identity added: id_rsa (id_rsa)
The user must confirm each use of the key

Eu listo todas as chaves adicionadas:

$ ssh-add -l
256  SHA256:... mygithubusername (ED25519)
521  SHA256:... id_ecdsa (ECDSA)
256  SHA256:... me@myhost (ED25519)
4096 SHA256:... id_rsa (RSA)

De onde o agente SSH obtém os nomes que usa para se referir às chaves?

Parece usar:

  1. comentário completo no arquivo de chaves (para uma chave)
  2. algumas partes do comentário no arquivo de chaves (para uma chave)
  3. nome do arquivo de chaves (para duas chaves)

É muito difícil entender isso. Usando o nome do arquivo da chave seria o mais direto, mas agora é apenas uma bagunça. Atualmente toda vez que eu faço o login com o SSH e recebo a caixa de diálogo de confirmação, não é fácil descobrir qual chave ele realmente está tentando usar.

    
por antti 06.07.2017 / 21:36

1 resposta

2

ssh-add tenta ler o comentário no arquivo de chave privada. Se falhar, usa o nome do arquivo como comentário para outros prompts:

De ssh-add.c : add_file ():

if (comment == NULL || *comment == '
 -c      Requests changing the comment in the private and public key files.  This
         operation is only supported for RSA1 keys.
') comment = xstrdup(filename);

Eu suspeitava que quaisquer identidades usando o nome do arquivo como o comentário não tinham nenhum comentário salvo originalmente com a chave, mesmo que uma delas fosse editada manualmente no arquivo-chave público em uma data posterior. A página de manual ssh-keygen indica que não há como alterar ou adicionar um comentário no arquivo-chave privado em nenhum formato de chave não obsoleto:

if (comment == NULL || *comment == '
 -c      Requests changing the comment in the private and public key files.  This
         operation is only supported for RSA1 keys.
') comment = xstrdup(filename);
    
por 07.07.2017 / 21:06

Tags