ssh-add adiciona todas as chaves privadas no diretório .ssh

4

No meu dia-a-dia, eu preciso do ssh para várias máquinas, todas com as quais tenho uma chave privada diferente.

Quando eu inicio uma nova sessão de shell - somente meu id_rsa padrão é adicionado ao ssh key chain - eu tenho executado

ssh-add ~/.ssh/*

No entanto, isso também trys e falha ao adicionar coisas como ~ / .ssh / config

Usando find / grep , como posso fazer com que apenas adicione arquivos de chave privada válidos?

    
por Matt Clark 09.11.2016 / 16:51

3 respostas

8

Ligeiramente convoluta, mas:

for possiblekey in ${HOME}/.ssh/id_*; do
    if grep -q PRIVATE "$possiblekey"; then
        ssh-add "$possiblekey"
    fi
done

Você também pode adicionar todas suas chaves ao seu ~/.ssh/config cada na própria IdentityFile diretiva fora de uma diretiva Host :

# Global SSH configurations here will be applied to all hosts
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_project1
IdentityFile ~/.ssh/id_someotherkey

Host somespecifichost.example.com
    IdentityFile ~/.ssh/id_specifichostonlykey

O último, honestamente melhor, método tem o privilégio adicionado de não pegar de repente uma nova chave que você adicionou sem explicitamente adicioná-lo ao "chaveiro" como se fosse.

    
por 09.11.2016 / 17:39
1

Eu criei o seguinte comando para fazer isso:

find ~/.ssh/ -type f -exec grep -l "PRIVATE" {} \; | xargs ssh-add &> /dev/null

Isso gerará find de todos os arquivos no diretório .ssh que contêm PRIVATE , passando o nome / caminho do arquivo de chave privada para ssh-add .

    
por 09.11.2016 / 16:51
0

Você realmente não precisa de find , você pode simplesmente usar um grep recursivo usando o l flag para enviar apenas nomes de arquivos correspondentes:

grep -slR "PRIVATE" ~/.ssh/ | xargs ssh-add

    
por 04.12.2017 / 19:49