Pergunta

Eu quero usar várias chaves privadas para conectar a diferentes servidores ou partes do mesmo servidor (meus usos são a administração do sistema de servidores, administração de Git, e uso normal Git dentro do mesmo servidor). 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> login@server.example.com 

Isso é bastante complicado.

Todas as sugestões de como proceder para fazer isso um pouco mais fácil?

Foi útil?

Solução

De minha .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.

Outras dicas

Você pode instruir ssh tentar várias chaves em sucessão ao 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 ~]$

Desta forma, você não tem que especificar o que funciona chave com a qual servidor. Só vai usar a primeira chave de trabalho.

Além disso, você só iria introduzir uma senha, se um determinado servidor está disposto a aceitar a chave. Como visto acima ssh não tente pedir uma senha para .ssh/id_rsa mesmo que tivesse um.

Com certeza ele não outbeat uma configuração por servidor como em outras respostas, mas pelo menos você não terá que adicionar uma configuração para todos e cada servidor que você conectar-se!

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

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

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

ssh friendly-name

Mais palavras-chave pode ser encontrado na página homem OpenSSH . NOTA: Algumas das palavras-chave listadas já deve estar presente em seu / etc / ssh / ssh_config arquivo

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

Certifique-se de testá-lo antes de acrescentar com:

ssh -i ~/.ssh/xxx_id_rsa username@example.com

Se você tiver qualquer problema com erros, por vezes, mudando a segurança do arquivo de ajuda:

chmod 0600 ~/.ssh/xxx_id_rsa

As respostas anteriores explicou adequadamente 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 é o substituição de um nome de host com um nome de alias, enquanto clonar o repositório .

Suponha, username sua da empresa de conta GitHub é abc1234 . E suponha que seu nome de usuário pessoal de conta GitHub é jack1234

E, suponha que você tenha criado duas chaves RSA, ou seja, id_rsa_company e id_rsa_personal . Assim, sua Configuração arquivo será semelhante a seguir:

# 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 repositório (chamado demo) da conta GitHub da empresa, a URL do repositório será algo como:

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

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

git@company:abc1234/demo.git

Observe como github.com é agora substituído com o pseudônimo de "empresa" como já definido no arquivo de configuração.

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

  1. Gerar chave SSH:

    $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. Gerar another SSH key:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
    

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

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. Criar ~/.ssh/config arquivo de configuração 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

Eu concordo com Tuomas sobre o uso do ssh-agent. Eu também queria acrescentar uma segunda chave privada para o trabalho e neste tutorial funcionou como um encanto para mim.

As etapas são as seguintes:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key por exemplo ssh-add ~/.ssh/id_rsa
  3. Verifique por $ ssh-add -l
  4. testá-lo com $ssh -v <host url> por exemplo ssh -v git@assembla.com

Eu tinha executar para esse problema um tempo atrás, quando eu tinha dois Bitbucket contas e queria tinha para armazenar chaves SSH separados para ambos. Isto é o que funcionou para mim.

Eu criei duas configurações ssh separadas da seguinte forma.

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 tinha para clonar um repositório de minha conta de trabalho -. O comando foi a 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 de minha conta pessoal teve que ser modificado para

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

Consulte este ligação para obter mais informações.

Use ssh-agente para suas chaves.

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

  [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/*

IMPORTANTE: É necessário iniciar ssh-agent

Você deve começar ssh-agent (se ele não estiver em execução) antes de usar o ssh-add a seguinte:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # where id_rsa_2 is your new private key file

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

Você pode criar um arquivo de configuração chamado config na sua pasta ~/.ssh. Ele pode conter:

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

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

 ssh aws

No Ubuntu 18.04 não há nada a fazer.

Depois de ter criado uma segunda chave ssh com sucesso o sistema irá tentar encontrar uma chave ssh correspondência para cada conexão.

Só para ficar claro, você pode criar uma nova chave com estes comandos

# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen 
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub

no CentOS 6.5 rodando OpenSSH_5.3p1, OpenSSL 1.0.1e-fips, eu resolvi o problema renomeando os meus arquivos importantes para que nenhum deles tinha o nome padrão. Meu diretório .ssh contém id_rsa_foo e id_rsa_bar mas nenhum id_rsa, etc.

Como mentionend em atlassian página do blog gerar um configuração em ssh , incluindo o seguinte texto:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

Em seguida, você pode simplesmente check-out com o domínio sufixo e dentro dos projetos que você pode configurar os nomes Autor etc. localmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top