Como adiciono permanentemente uma identidade ao SSH?

37

Eu preciso executar ssh-add <key>toda vez que eu precisar ssh em um servidor web. Existe uma maneira de adicionar o ID permanentemente, então não preciso continuar adicionando as identidades em cada login?

EDIT: A chave é um arquivo pem, que eu baixei de um serviço em nuvem.

theTuxRacer
fonte

Respostas:

40

Gere sua chave como normal: ssh-keygene coloque-a no servidor remoto ssh-copy-id, que a sincronizará com as chaves aceitas do servidor remoto.

ssh-keygen
ssh-copy-id user@host

Ele solicitará sua senha e executará todas as etapas necessárias para vincular sua .pubchave ao servidor SSH remoto.

Por padrão, ele copiará todas as suas chaves .pub no servidor remoto. Se você acabou de criar sua chave ssh-keygen, isso não é um problema (porque você só tem uma!). No entanto, se você tiver várias chaves, poderá copiar apenas uma chave específica com o -isinalizador.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Substituindo key_name.pubpelo nome da chave.

Marco Ceppi
fonte
4
Para alguém como eu (ou o responsável pela pergunta) cuja única exposição ao ssh é usá-lo para acessar servidores hospedados na nuvem em que o serviço web cria a chave e a entrega a mim (no meu caso, servidores da AWS), é difícil responder a essa pergunta entender sem fazer uma pesquisa de fundo significativa. Eu nunca usei ssh-keygenou ssh-copy-id, por exemplo. Por outro lado, respostas como essa são perfeitamente claras e úteis para mim, dado meu nível de conhecimento. Você decide se deseja ajustar sua resposta de alguma forma para ajudar pessoas ignorantes como eu. :)
Mark Amery 14/01
A resposta assume que eu quero gerar uma nova chave. E se eu quiser simplesmente registrar uma chave existente no chaveiro?
donquixote 15/01
@donquixote: veja a resposta abaixo pelo usuário626052.
naught101 9/03
7

Você pode gerar uma chave ssh com o comando:

ssh-keygen

Em seguida, você pode copiar sua chave para o servidor com:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Agora você pode fazer login automaticamente no seu servidor da web

Arthur Knopper
fonte
1
Para copiar a chave para o servidor, você pode simplesmente usar ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameou ~/.ssh/id_rsa.pubrespectivamente. Na verdade, se você usar o nome padrão para o arquivo de chave, nem precisará especificá-lo.
Carsten Thiel
5

coloque isso no seu ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 
user626052
fonte
3
Esta é a única resposta que realmente responde à pergunta. Os outros estão apenas adicionando a chave pública padrão a um único servidor de destino, o que é irritante se você tiver dois + separados para diferentes conjuntos de servidores.
naught101 8/03
3

Se sua chave é sem senha e é nomeada como um dos arquivos que o ssh tentará procurar ao identificar (~/.ssh/id_dsa ou ~/.ssh/id_rsa), não será necessário adicioná-la ao seu agente.

MAS. Se houver a menor possibilidade desses arquivos serem roubados, você teria permitido que alguém acessar os servidores nos quais está usando essa identidade. Em suma, pwned.

IMHO, chaves privadas sem senha são uma prática ruim e devem ser usadas apenas em ambientes onde ~/.ssh/authorized_keysé muito restritivo.

zuzur
fonte
1
O ssh-agent pode manter sua chave privada descriptografada enquanto você estiver conectado. Se ativado, o gnome-keyring pode até usar sua senha de login. Ah, e o ssh-copy-id também pode copiar sua chave pública para os servidores.
Frank
2

Escreva um script de shell curto que execute o ssh-add e conecte-se como o seguinte:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Você pode então ssh no seu host com um comando.

hgolov
fonte
1

Para a AWS, baixe a chave pem e execute:

ssh-add /path/to/pemfile.pem

Isso funcionou para mim, o Ubuntu 18.04. Fonte , nada mais era necessário.

NB : No entanto, é importante definir as permissões para 400 antes de fazer isso.

chmod 400 /path/to/pemfile.pem

Caso contrário, você receberá um erro:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
AVISO: ARQUIVO CHAVE PRIVADO NÃO PROTEGIDO ! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ As permissões 0664 para '/home/toing_toing/blablabla.pem' estão muito abertas. É necessário que seus arquivos de chave privada NÃO sejam acessíveis por terceiros. Essa chave privada será ignorada.

toing_toing
fonte
0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 
wangjianli
fonte
-2

Você está falando sobre o Amazon Cloud? No seu ~ / .bashrc, crie variáveis ​​de ambiente:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

fonte
sim, eu falo sobre a nuvem, mas esta é a chave par-to ssh para o exemplo, e as variáveis de ambiente acima são necessários para usar a API-tools :)
theTuxRacer
Está bem. Portanto, gere uma chave RSA sem senha: 'ssh-keygen -t rsa' e concatene a chave pública gerada (~ / .ssh / id_dsa.pub) no arquivo ~ / .ssh / allowed_keys do servidor remoto. Muitos disseram que uma única linha para conseguir isso foi dada.