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 set
um 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_SOCK
configurei para um valor válido (retornado de ssh-agent
).
Respostas:
Ao reproduzir isso para investigar, percebo que tenho meu chaveiro configurado para "Confirmar antes de permitir o acesso". Portanto, quando executo
find-internet-password
localmente com o-g
sinalizador, 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 ossh
caso, com um código de retorno51
.Quando tento o comando remotamente
ssh
, o-g
resultado imediatamente é uma falha, com o status36
que você está relatando.Suspeito que isso
ssh
ocorra porque, quando você entra, não há como o sistema abrir uma caixa de diálogo, permitindo que você confirme que deseja permitir que osecurity
comando acesse essas informações.Consegui que o comando funcionasse enquanto estava conectado,
ssh
clicando 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
security
programa 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
security
lá, que pode ser excluída:fonte
security unlock-keychain ~/Library/Keychains/login.keychain
na 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 :)/Users/[user]/Library/Keychains/
caminho padrão, você poderá omitir o caminho completo e seguir apenaslogin.keychain
.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.
fonte
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"
fonte