publica - Melhor maneira de usar várias chaves privadas SSH em um cliente




ssh com chaves (9)

Eu quero usar várias chaves privadas para se conectar a diferentes servidores ou partes diferentes do mesmo servidor (meus usos são administração do sistema do servidor, administração do Git e uso normal do Git dentro do mesmo servidor). Eu tentei simplesmente empilhar as chaves nos arquivos id_rsa sem sucesso.

Aparentemente, uma maneira simples de fazer isso é usar o comando

ssh -i <key location> [email protected] 

Isso é bastante complicado.

Alguma sugestão de como fazer isso um pouco mais fácil?


  1. Gerar chave SSH:

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. Gere another SSH key :

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
    

    Agora, duas chaves públicas ( id_rsa.pub , accountB.pub ) devem existir no diretório ~/.ssh/ .

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. Crie o arquivo de configuração ~/.ssh/config com o seguinte conteúdo:

    $ nano ~/.ssh/config
    
    Host bitbucket.org  
        User git  
        Hostname bitbucket.org
        PreferredAuthentications publickey  
        IdentityFile ~/.ssh/id_rsa  
    
    Host bitbucket-accountB  
        User git  
        Hostname bitbucket.org  
        PreferredAuthentications publickey  
        IdentitiesOnly yes  
        IdentityFile ~/.ssh/accountB  
    
  4. Clone da conta default .

    $ git clone [email protected]:username/project.git
    
  5. Clone da conta accountB .

    $ git clone [email protected]:username/project.git
    

Veja mais aqui


A resposta de Randal Schwartz quase me ajudou todo o caminho. Eu tenho um nome de usuário diferente no servidor, então eu tive que adicionar a palavra-chave User ao meu arquivo:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

Agora você pode se conectar usando o nome amigável:

ssh friendly-name

Mais palavras-chave podem ser encontradas na página do manual do OpenSSH . NOTA: Algumas das palavras-chave listadas podem já estar presentes em seu arquivo / etc / ssh / ssh_config .


As respostas anteriores explicaram corretamente a maneira de criar um arquivo de configuração para gerenciar várias chaves ssh. Eu acho que o importante que também precisa ser explicado é a substituição de um nome de host por um nome de alias ao clonar o repositório .

Suponha que o nome de usuário da conta do GitHub da sua empresa seja abc1234 . E suponha que o nome de usuário da sua conta pessoal do GitHub seja jack1234

E, suponha que você tenha criado duas chaves RSA, ou seja, id_rsa_company e id_rsa_personal . Então, o seu arquivo de configuração será parecido com abaixo:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

Agora, quando você estiver clonando o repositório (chamado demo) da conta do GitHub da empresa, a URL do repositório será algo como:

Repo URL: [email protected]:abc1234/demo.git

Agora, ao fazer o git clone , você deve modificar o URL do repositório acima como:

[email protected]:abc1234/demo.git

Observe como o github.com agora é substituído pelo alias "company", conforme definimos no arquivo de configuração.

Similarmente, você tem que modificar a URL clone do repositório na conta pessoal, dependendo do alias fornecido no arquivo de configuração.


Do meu .ssh/config :

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

E assim por diante.


Eu tinha me deparado com essa questão há algum tempo, quando tinha duas contas Bitbucket e queria ter que armazenar chaves SSH separadas para ambas. Isto é o que funcionou para mim.

Eu criei duas configurações ssh separadas como segue.

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

Agora, quando eu tive que clonar um repositório da minha conta de trabalho - o comando era o seguinte.

git clone [email protected]:teamname/project.git

Eu tive que modificar este comando para:

git clone [email protected]**work**.bitbucket.org:teamname/project.git

Da mesma forma, o comando clone da minha conta pessoal teve que ser modificado para

git clone git @ pessoal .bitbucket.org: nome / personalproject.git

Consulte este link para mais informações.


No Cents 6.5 executando OpenSSH_5.3p1, OpenSSL 1.0.1e-fips, resolvi o problema renomeando meus arquivos de chave para que nenhum deles tivesse o nome padrão. Meu diretório .ssh contém id_rsa_foo e id_rsa_bar mas não id_rsa, etc.


Você pode criar um arquivo de configuração denominado config em sua pasta ~/.ssh . Pode conter:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

Isso permitirá que você se conecte a máquinas como esta

 ssh aws

Você pode instruir o ssh a tentar várias chaves sucessivamente ao se conectar. Veja como:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

Dessa forma, você não precisa especificar qual chave funciona com qual servidor. Vai usar apenas a primeira chave de trabalho.

Além disso, você só digitaria uma frase secreta se um determinado servidor estivesse disposto a aceitar a chave. Como visto acima, ssh não tentou pedir uma senha para .ssh/id_rsa mesmo que tivesse uma.

Certamente não excede uma configuração por servidor como em outras respostas, mas pelo menos você não terá que adicionar uma configuração para todo e qualquer servidor que você se conectar!


foo:~$ssh-add ~/.ssh/xxx_id_rsa

Certifique-se de testá-lo antes de adicionar:

ssh -i ~/.ssh/xxx_id_rsa username[email protected]

Se você tiver algum problema com erros, às vezes, alterar a segurança do arquivo ajuda:

chmod 0600 ~/.ssh/xxx_id_rsa




openssh