O OpenSSH não pode usar arquivos PKCS # 12 prontos para uso. Como outros sugeriram, você deve extrair a chave privada no formato PEM, que o leva da região do OpenSSL para o OpenSSH. Outras soluções mencionadas aqui não funcionam para mim. Eu uso o OS X 10.9 Mavericks (10.9.3 no momento) com utilitários "pré-empacotados" (OpenSSL 0.9.8y, OpenSSH 6.2p2).
Primeiro, extraia uma chave privada no formato PEM que será usada diretamente pelo OpenSSH:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa
Eu sugiro fortemente criptografar a chave privada com senha:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa
Obviamente, escrever uma senha em texto sem formatação na linha de comando também não é seguro; portanto, você deve excluir o último comando do histórico ou apenas garantir que ele não chegue lá. Conchas diferentes têm maneiras diferentes. Você pode prefixar seu comando com espaço para impedir que ele seja salvo no histórico no Bash e em muitos outros shells. Veja também como excluir o comando do histórico no Bash:
history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')
Como alternativa, você pode usar uma maneira diferente de passar uma senha de chave privada para o OpenSSL - consulte a documentação do OpenSSL para obter argumentos de frase secreta .
Em seguida, crie uma chave pública OpenSSH que possa ser adicionada ao arquivo allowed_keys:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub