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

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  login@server.example.com 

Isso é bastante complicado.

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

    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 User remoteusername 

    E assim por diante.

    A resposta de Randal Schwartz quase me ajudou por 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 .

    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@example.com 

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

     chmod 0600 ~/.ssh/xxx_id_rsa 

    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 repository .

    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ê está clonando o repository (chamado demo) da conta do GitHub da empresa, a URL do repository será algo como:

     Repo URL: git@github.com:abc1234/demo.git 

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

     git@company: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 repository na conta pessoal, dependendo do alias fornecido no arquivo de configuração.

    Eu concordaria com Tuomas sobre o uso de ssh-agent. Eu também queria adicionar uma segunda chave privada para o trabalho e este tutorial funcionou como um encanto para mim.

    Os passos são como abaixo:

    1. $ ssh-agent bash
    2. $ ssh-add /path.to/private/key eg ssh-add ~/.ssh/id_rsa
    3. Verificar por $ ssh-add -l
    4. Teste com $ssh -v eg ssh -v git@assembla.com
    1. Gerar chave SSH:

       $ ssh-keygen -t rsa -C  
    2. Gere another SSH key :

       $ ssh-keygen -t rsa -f ~/.ssh/accountB -C  

      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 git@bitbucket.org:username/project.git 
    5. Clone da conta accountB .

       $ git clone git@bitbucket-accountB:username/project.git 

    Veja mais aqui

    Use o ssh-agent para suas chaves.

    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 tive que clonar um repository da minha conta de trabalho – o comando era o seguinte.

     git clone git@bitbucket.org:teamname/project.git 

    Eu tive que modificar este comando para:

     git clone git@**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.

    Você pode criar um arquivo de configuração chamado config na 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 

    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.

    IMPORTANTE: Você deve iniciar o ssh-agent

    Você deve iniciar o ssh-agent (se já não estiver em execução) antes de usar o ssh-add da seguinte forma:

     eval `ssh-agent -s` # start the agent ssh-add id_rsa_2 # where id_rsa_2 is your new private key file 

    Observe que o comando eval inicia o agente no GIT bash nas janelas. Outros ambientes podem usar uma variante para iniciar o agente SSH.

    Agora, com a versão recente do git, podemos especificar sshCommand no arquivo de configuração git específico do repository.

      [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sshCommand = ssh -i ~/.ssh/id_rsa_user [remote "origin"] url = git@bitbucket.org:user/repo.git fetch = +refs/heads/*:refs/remotes/origin/*