Como programar programaticamente a chave ssh padrão?

3

Na maior parte da minha experiência, por padrão, ssh irá procurar em ~ / .ssh / id_rsa (.pub) pelo par de chaves padrão.

Ocasionalmente, tento escrever scripts para tirar proveito desse local de chave padrão, mas acabo gravando o código (por exemplo, DEFAULT_KEY_LOCATION="${HOME}/.ssh/id_rsa" ou algo assim), o que eu sinto ser um BadThing ™.

Existem variáveis ou saídas de ambiente das ferramentas ssh que podem me dizer qual a localização das chaves padrão dos usuários?

Por exemplo, existem comandos como ssh-defaults --key-location ou variáveis de ambiente $ SSH_DEFAULT_KEY?

    
por Drew 04.04.2014 / 04:06

1 resposta

3

Da página man do ssh:

     -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and
         ~/.ssh/id_rsa for protocol 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 configuration files).  ssh will also try to load
         certificate information from the filename obtained by appending
         -cert.pub to identity filenames.

Posteriormente, se estiver em um local que possa ser encontrado automaticamente pelo ssh, o caminho não precisará ser especificado. ou seja,

ssh -i ~/.ssh/id_rsa [email protected]

e

ssh [email protected]

ambos funcionarão da mesma maneira. Se você precisar encontrar o local da chave programaticamente por uma razão diferente de usar ssh (ou seja, preenchendo chaves autorizadas), você pode verificar todos os locais que o arquivo de configuração verifica e analisar o arquivo ssh_config para procurar por entradas de host individuais. Do homem ssh_config:

         The file name may use the tilde syntax to refer to a user’s home
         directory or one of the following escape characters: ‘%d’ (local
         user’s home directory), ‘%u’ (local user name), ‘%l’ (local host
         name), ‘%h’ (remote host name) or ‘%r’ (remote user name).

Portanto, você também teria que analisar esse formato para localizar arquivos individuais (se definidos).

    
por 06.04.2014 / 13:08