Como ssh para servidor remoto usando uma chave privada?

77

Eu tenho dois servidores. Ambos os servidores estão no CentOS 5.6. Quero fazer o SSH do Servidor 1 para o Servidor 2 usando uma chave privada que tenho (Chave Privada OpenSSH SSH-2).

Eu não sei como fazê-lo no unix. Mas o que fiz no Windows usando o Putty foi alimentar minha chave privada OpenSSH para gerar putty-gen e gerar uma chave privada no formato PPK.

No entanto, eu estaria criando um script bash do servidor 1 que executará alguns comandos no servidor 2 via SSH.

Como SSH para o servidor 2 usando meu arquivo de chave privada do servidor 1?

Aivan Monceller
fonte
1
Em muitos sistemas Linux e Unix, isso pode ser feito usandossh-copy-id user@machine
Paul Tomblin

Respostas:

66

Você precisa da sua chave pública SSH e da sua chave privada ssh. Chaves podem ser geradas com ssh_keygen. A chave privada deve ser mantida no servidor 1 e a chave pública deve ser armazenada no servidor 2.

Isso está completamente descrito na página de manual do openssh, então citarei muito disso. Você deve ler a seção 'Autenticação'. Além disso, o manual do openSSH deve ser realmente útil: http://www.openssh.org/manual.html

Por favor, tenha cuidado com o ssh, pois isso afeta a segurança do seu servidor.

De man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Isso significa que você pode armazenar sua chave privada em seu diretório pessoal em .ssh. Outra possibilidade é dizer ao ssh através do -icomutador de parâmetros para usar um arquivo de identidade especial. Também de man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Isto é para a chave privada. Agora você precisa introduzir sua chave pública no Servidor 2. Novamente, uma citação de man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

A maneira mais fácil de obter isso é copiar o arquivo no Servidor 2 e anexá-lo ao arquivo allowed_keys:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

A autorização via chave pública deve ser permitida para o daemon ssh, consulte man ssh_config. Geralmente, isso pode ser feito adicionando a seguinte instrução ao arquivo de configuração:

PubkeyAuthentication yes
echox
fonte
10
Oi, obrigado pelo esforço, mas eu só preciso disso. ssh -i keyfileobrigado!
Aivan Monceller 25/10
8
Depois de gerar a chave, a maneira mais fácil e recomendado para instalá-lo no servidor é com ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles
5
É interessante como todos esquecem de mencionar que você precisa executar ssh-adddepois de criar uma chave no computador do qual você está se conectando. é isso que causa dor de cabeça para a maioria das pessoas.
Luka
3
NOTA IMPORTANTE: O cliente pode ter muitas chaves privadas e selecionar com base em um nome arbitrário em seu arquivo ~ / .ssh / config particular, em que Host = fornece o nome arbitrário, HostName fornece um nome ou endereço IP, Port = a porta de destino, Usuário é nome de usuário de destino e ItentityFile = aponta para o arquivo de chave privada. Esse conjunto de recursos geralmente é ignorado e é a solução para muitos problemas de configuração, como ter vários pares de chaves que, de outra forma, colidem no espaço de nome.
Richard T
1
Quando tento conectar-me ao SSH usando $ ssh -i ~/.ssh/id_rsa [email protected], recebo o erro [email protected]: Permission denied (publickey).: tenho a chave criada, adicionada localmente usando ssh-adde adicionada como chave autorizada no servidor remoto.
Aaron Franke
21

Eu usei o ssh com a opção -i para adicionar sua chave aqui.

Se você deseja passar arg1, arg2 com o arquivo .sh, basta passá-lo após o arquivo .sh e use um espaço de uso para separá-lo.

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Avinash Raut
fonte
1
Não se esqueça de definir as permissões corretas:chmod 600 home/avr/new.pem
Brian Haak
16

A primeira coisa que você precisa fazer é ter certeza de executar o comando keygen para gerar as chaves:

ssh-keygen -t rsa

Em seguida, use este comando para enviar a chave ao servidor remoto, modificando-a para corresponder ao nome do servidor.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
fonte
6
vamos chamar em ssh-copy-id user@hostnamevez disso
andrej
7

Anexe a chave pública ( id_[rd]sa.pub) da sua máquina de origem (de onde você está usando o ~/.ssh/authorized_keysssh ) ao arquivo do servidor de destino para o nome de usuário no qual você deseja ssh. Se você perdeu a chave pública, convém criar uma nova ssh-keygen. O uso dos argumentos padrão para isso deve ser bom para a maioria dos propósitos. Se você precisar de instruções mais detalhadas, existem milhares de tutoriais no Google.

Kevin
fonte
4

ssh-copy-id - use chaves disponíveis localmente para autorizar logins em uma máquina remota

Use ssh-copy-idno Servidor 1, supondo que você tenha o par de chaves (gerado com ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Agora você deve poder ssh no Servidor 2 com ssh usando a chave privada

ssh -i ~/.ssh/id_rsa user@server2_hostname

De fato, se você verificar o cat ~/.ssh/authorized_keysServidor 2, verá que a chave pública foi anexada a você.

Sida Zhou
fonte