Por padrão, o ssh pesquisa id_dsa
e id_rsa
arquivos. As chaves não precisam ser nomeadas dessa maneira, você também pode nomeá-las mykey
ou até colocá-las em um diretório diferente. No entanto, se você escolher um desses, precisará referenciar explicitamente a chave no comando ssh da seguinte maneira:
ssh user@server -i /path/to/mykey
Se um comando não aceitar -i
, por exemplo sshfs
, use a IdentityFile
opção:
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.
A autenticação de chave pública funciona com uma chave pública e uma privada. O cliente e o servidor têm suas próprias chaves. Ao instalar openssh-server
o servidor, chaves públicas e privadas 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 servidor seu. Na primeira vez que você receber a chave pública do servidor, você será solicitado a aceitá-la. Se essa chave pública mudar ao longo do tempo, você será avisado porque um possível ataque MITM (homem no meio) está acontecendo, 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 ~/.ssh/authorized_keys
arquivo. Possíveis razões pelas quais a chave pública é negada:
/etc/ssh/sshd_config
:
AllowUsers
ou AllowGroups
está especificado, mas o usuário do servidor não está listado na lista de grupos ou usuários (o padrão não é definido, não havendo restrição para os usuários ou grupos de efetuar login).
DenyUsers
ou DenyGroups
está especificado e você está na lista de usuários ou grupos.
- Você está tentando fazer login como root, mas
PermitRootLogin
está definido como No
(padrão yes
).
PubkeyAuthentication
está definido como No
(padrão yes
).
AuthorizedKeysFile
está definido para um local diferente e as chaves públicas não são adicionadas a esse arquivo (padrão .ssh/authorized_keys
, em relação ao diretório inicial)
~/.ssh/authorized_keys
: sua chave pública não é adicionada neste arquivo (observe que este arquivo é lido como usuário root)
Usando várias chaves
Não é incomum usar várias chaves. Em vez de executar ssh user@host -i /path/to/identity_file
, você pode usar um arquivo de configuração ~/.ssh/config
,.
As 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 youruser@yourhost
:
Host yourhost
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/bender
Se você omitir Host yourhost
, as configurações serão aplicadas a todas as conexões SSH. Outras opções também pode ser especificado para este jogo host, como User youruser
, Port 2222
, etc. Isso permitirá que você se conectar com a abreviação ssh yourhost
em vez de ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender
.
ssh_config(5)
: O nome do arquivo pode usar a sintaxe til para se referir ao diretório inicial de um usuário ou a um dos seguintes caracteres de escape: '% d' (diretório inicial do usuário local), '% u' (nome do usuário local), '% l '(nome do host local),'% h '(nome do host remoto) ou'% r '(nome do usuário remoto). Não é possível especificar curingas, mas isso deve ser conveniente o suficiente, eu acho. Esteja ciente de que um servidor precisa analisar cada chave que você enviou, portanto, especificar menos chaves é melhor. Os curingas no host funcionam, consulte novamente a página de manual dessh_config(5)
..ssh/authorized_keys
arquivo nas máquinas remotas. Se você usar o.ssh/id_rsa
nome do arquivo padrão (ou id_dsa, id_ecdsa ou o id_ed25519 recente), o ssh tentará isso automaticamente e você não precisará especificarIdentityFile
na sua configuração (ou no-i path/to/id_file
parâmetrossh
).Meu método favorito permite que a chave privada seja selecionada automaticamente
O SSH substituirá% l pelo nome da máquina local,% r pelo nome de usuário remoto e% h pelo host remoto; portanto, se eu quiser conectar-me da minha máquina chamada foo a bar como usuário, execute:
E o ssh usaria automaticamente:
Como o host local também é armazenado, isso permite diretórios pessoais compartilhados por NFS (chave diferente por máquina!) Ou até mesmo identifica em qual máquina a chave deveria estar ...
fonte
Considerando o comentário de StevenRoose de que leva mais tempo para especificar muitas teclas e, por acaso, estou brincando com muitas teclas, gostaria de sugerir minha solução pessoal.
Crio um link simbólico para a chave que quero usar no momento e, como isso muda com pouca frequência, dependendo do projeto em que estou trabalhando, fico feliz com isso.
Aqui, vinculei às minhas chaves para máquinas rodando em virtualbox:
Também se pode adicionar um script muito rápido para mudar para outro conjunto sem a necessidade de digitar manualmente o comando ln novamente.
Novamente, essa não é uma solução apenas para duas chaves, mas para um número maior, pode ser viável.
fonte