A chave ssh precisa ser nomeada id_rsa?

104

Eu me deparei com esse problema algumas vezes ao criar servidores de compilação com autenticação por chave.

Eu queria saber se alguém já experimentou isso. Eu tenho algumas chaves para o meu usuário atual que podem se conectar a diferentes máquinas. Vamos dizer machine1 e machine2. Eu colei minha chave pública em seus respectivos arquivos authorized_keys. O primeiro nomei a primeira chave id_rsa e a segunda chave bender.

Quando tento conectar ao bender, recebo a seguinte saída com minha conexão ssh detalhada

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Ele oferece apenas a chave id_rsa, como você pode ver acima. Isso está correto? Se sim porque? Como faço para oferecer mais chaves? Eu sei que é um problema que vejo de forma intermitente, porque eu em casa eu tenho várias chaves sem muita dificuldade.

Eu também gostaria de ter uma visão geral de como o pub e as chaves privadas interagem com o cliente e o servidor. Eu pensei que eu tinha uma idéia bastante decente, mas aparentemente estou perdendo alguma coisa.

Por favor e obrigado.

    
por myusuf3 17.03.2011 / 16:37

3 respostas

130

Por padrão, o ssh pesquisa por arquivos id_dsa e id_rsa . As chaves não precisam ser nomeadas assim, você pode nomear mykey da mesma forma, ou até colocá-las em um diretório diferente. No entanto, se você fizer qualquer um desses, precisará referenciar explicitamente a chave no comando ssh da seguinte forma:

ssh user@server -i /path/to/mykey

Se um comando não aceitar -i , por ex. sshfs , use a opção IdentityFile :

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

Como funciona

Ao gerar uma chave, você obterá dois arquivos: id_rsa (chave privada) e id_rsa.pub (chave pública). Como seus nomes sugerem, a chave privada deve ser mantida em segredo e a chave pública pode ser publicada ao público.

A autenticação de chave pública funciona com uma chave pública e privada. Tanto o cliente quanto o servidor possuem suas próprias chaves. Ao instalar openssh-server , as chaves pública e privada do servidor são geradas automaticamente. Para o cliente, você terá que fazer isso sozinho.

Quando você (cliente) se conecta a um servidor, as chaves públicas são trocadas. Você receberá os servidores um e o seu servidor. Na primeira vez que você receber a chave pública do servidor, você será solicitado a aceitá-la. Se esta chave pública mudar ao longo do tempo, você será avisado porque um possível ataque MITM (Man in the middle) está em andamento, interceptando o tráfego entre o cliente e o servidor.

O servidor verifica se você tem permissão para se conectar (definido em /etc/ssh/sshd_config ) e se sua chave pública está listada no arquivo ~/.ssh/authorized_keys . Possíveis razões pelas quais a chave pública é negada:

  • %código%:
    • /etc/ssh/sshd_config ou AllowUsers é especificado, mas o usuário do servidor não está listado na lista de grupos ou usuários (o padrão não está definido, não impõe restrições a usuários ou grupos de efetuar login).
    • AllowGroups ou DenyUsers está especificado e você está na lista de usuários ou grupos.
    • Você está tentando fazer o login como root, mas DenyGroups está definido como PermitRootLogin (padrão No ).
    • yes está definido como PubkeyAuthentication (padrão No ).
    • yes está definido para um local diferente e as chaves públicas não são adicionadas ao arquivo (padrão AuthorizedKeysFile , relativo ao diretório inicial)
  • .ssh/authorized_keys : sua chave pública não é adicionada neste arquivo (note que este arquivo é lido como usuário root)

Usando várias chaves

Não é incomum usar várias chaves. Em vez de executar ~/.ssh/authorized_keys , você pode usar um arquivo de configuração, ssh user@host -i /path/to/identity_file .

Configurações comuns são o IdentityFile (as chaves) e a porta. A próxima configuração verificará "id_dsa" e "bender" somente ao se conectar com ~/.ssh/config :

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Se você omitir ssh youruser@yourhost , as configurações serão aplicadas a todas as conexões SSH. Outras opções também podem ser especificadas para essa correspondência de host, como Host yourhost , User youruser , etc. Isso permitiria que você se conectasse com a abreviação Port 2222 em vez de ssh yourhost .

    
por Lekensteyn 17.03.2011 / 16:58
29

Meu método favorito permite que a chave privada seja selecionada automaticamente

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

O SSH substituirá% l pelo nome da máquina local,% r pelo nome de usuário remoto e% h pelo host remoto; assim, se eu quiser me conectar da minha máquina chamada foo para barrar como usuário, eu corro:

ssh bar

E o ssh usaria automaticamente:

~/.ssh/foo_user@bar_id_rsa

Como o host local também é armazenado, isso permite que diretórios caseiros sejam compartilhados via NFS (chave diferente por máquina!) ou até mesmo identificar em qual máquina a chave deveria estar ...

    
O
por Viperfang 19.02.2014 / 19:54
0

Em consideração ao comentário de StevenRoose de que demora mais para especificar muitas chaves, e por acaso estou brincando com muitas chaves, gostaria de sugerir minha solução pessoal.

Eu criei um link simbólico para a chave que desejo usar no momento e, como isso só muda com pouca frequência, dependendo do projeto em que estou trabalhando, estou feliz com isso.

Aqui, vinculei minhas chaves a máquinas executadas no VirtualBox:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

Também é possível adicionar um script realmente rápido para mudar para outro conjunto sem precisar digitar manualmente o comando ln novamente.

Novamente, isso não é uma solução apenas para duas chaves, mas para um número maior, pode ser viável.

    
por ajhcasual 04.10.2013 / 16:43

Tags