Como posso acessar o chaveiro remotamente na linha de comando?

23

Estou armazenando várias senhas (por exemplo, para servidores de email remotos) no meu chaveiro. Na linha de comando, quando conectado localmente, posso recuperá-los via:

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<dumps keychain attributes, including password>

No entanto, os resultados não podem ser alcançados quando executados remotamente (ssh'ing na caixa de outro lugar):

security unlock-keychain ~/Library/Keychains/login.keychain
<enter password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com
<dumps keychain attributes, not including password>
security find-internet-password -s smtp.gmail.com -a foo@gmail.com -g
<nothing printed, to stdout or stderr>

Além disso, o valor de retorno do comando final (usando -g) é 36.

Eu joguei a saída de setum logon local e o comparei com um remoto, e as variáveis ​​de ambiente ausentes são:

Apple_PubSub_Socket_Render
GPG_AGENT_INFO
SECURITYSESSIONID
TERM_PROGRAM
TERM_PROGRAM_VERSION
TERM_SESSION_ID
XPC_FLAGS
XPC_SERVICE_NAME

o que estou perdendo? Eu SSH_AUTH_SOCKconfigurei para um valor válido (retornado de ssh-agent).

Éter
fonte
Relacionados: Acesso às Chaves De Shell
kenorb

Respostas:

11

Ao reproduzir isso para investigar, percebo que tenho meu chaveiro configurado para "Confirmar antes de permitir o acesso". Portanto, quando executo find-internet-passwordlocalmente com o -gsinalizador, recebo uma caixa de diálogo informando que a segurança deseja usar suas informações confidenciais armazenadas em "smtp". gmail.com "no seu chaveiro. Se eu clicar em "Permitir", ele funcionará; se eu clicar em "Negar", ele falhará da mesma forma que o sshcaso, com um código de retorno 51. Caixa de diálogo de confirmação de acesso

Quando tento o comando remotamente ssh, o -gresultado imediatamente é uma falha, com o status 36que você está relatando.

Suspeito que isso sshocorra porque, quando você entra, não há como o sistema abrir uma caixa de diálogo, permitindo que você confirme que deseja permitir que o securitycomando acesse essas informações.

Consegui que o comando funcionasse enquanto estava conectado, sshclicando primeiro na opção "Sempre permitir" ao executar o comando localmente. Isso atualiza as permissões no Keychain para que eu não precise mais responder à caixa de diálogo (mesmo localmente), o que permite que ele funcione remotamente também.

Entretanto, não sei se isso será totalmente útil para você, pois acho que você precisará conceder preventivamente ao securityprograma o acesso a qualquer item de chaveiro que você queira acessar remotamente. Pode ser possível escrever um script para fazer isso?

Se você estiver experimentando isso manualmente e posteriormente quiser revogar esse acesso, poderá acessar o item afetado no Acesso às Chaves, escolher Obter Informações e acessar a guia Controle de Acesso . Você verá uma entrada para securitylá, que pode ser excluída:Caixa de diálogo Controle de Acesso

James Elliott
fonte
Fiz a mesma coisa - adicionei o comando 'security' à lista "sempre permitir acesso" (que também é feita clicando em "Sempre permitir" no pop-up que aparece ao emitir o comando localmente), mas ainda não consigo acesse o item de chaveiro remotamente a partir de então. Deve haver outra configuração em algum lugar que precise ser alterada, mas não consigo encontrá-la.
Éter
1
ahahaha - este faz realmente o trabalho, mas é preciso fazer login com uma nova sessão depois de alterar as configurações no chaveiro para que eles tenham efeito. Viva! (Vou adicionar uma resposta a esta pergunta se eu nunca descobrir como alterar remotamente os privilégios de acesso, mas arrumar as coisas localmente com antecedência para uso remoto subseqüente é aceitável para agora.)
Éter
2
Observe também - é essencial também executar security unlock-keychain ~/Library/Keychains/login.keychainna sessão remota em que você está tentando usar o chaveiro. Isso solicitará sua senha, portanto você não poderá fazer isso em um script. Pode haver maneiras de conseguir isso sem uma senha, mas que está fora do âmbito desta questão :)
Éter
alguém sabe se posso digitar a senha na linha de comando para a segurança unlock-keychain?
tofutim 23/09/16
1
@Outro Se o chaveiro estiver no /Users/[user]/Library/Keychains/caminho padrão, você poderá omitir o caminho completo e seguir apenas login.keychain.
Solgar 25/01
5

security -i unlock-keychain

funciona para mim no MacOS 10.13.4 High Sierra.

Depois de investigar a solução de Karthick, encontrei isso. O -i torna o comando interativo e solicita sua senha no terminal.

Matt Clapp
fonte
3

Enquanto o chaveiro de segurança estiver no local padrão, você pode executar o comando abaixo para desbloqueá-lo. Não solicita uma senha. Funcionou remotamente.

security unlock-keychain -p "enter password"

Karthick
fonte
Bem-vindo ao perguntar diferente! Estamos tentando encontrar as melhores respostas e essas respostas fornecerão informações de suporte sobre por que elas são as melhores. As respostas devem ser independentes. Explique por que você acha que a resposta que você forneceu resolverá o problema ou é melhor do que outras pessoas por aí. O fornecimento de links como informações de suporte também pode ajudar o OP e outros a encontrar informações adicionais. Consulte Como responder sobre como fornecer uma resposta de qualidade. - Do comentário
fsb 22/02