para migrar para um Ubutun, gostaria de exportar toda a minha senha, por exemplo, um arquivo CSV.
No Keychain Access, encontrei o menu de exportação, mas sempre desativado, mesmo quando o acesso é desbloqueado.
O que devo fazer?
para migrar para um Ubutun, gostaria de exportar toda a minha senha, por exemplo, um arquivo CSV.
No Keychain Access, encontrei o menu de exportação, mas sempre desativado, mesmo quando o acesso é desbloqueado.
O que devo fazer?
Respostas:
É exatamente assim que eu fiz isso há muitos anos, é a atualização de script para o Yosemite 10.11.5 - mas ainda não a testei.
Um script que salva cada item no Keychain em texto:
security dump-keychain -d login.keychain > keychain.txt
Um segundo item AppleScript que clica no botão "Permitir" que o primeiro script dispara ao ler o item no KeyChain.
[Edit: July 2016] Isso foi atualizado para a nota 10.11.5, já que alguns relataram travar o Mac com atraso de 0,2. Limitei o script para processar apenas 200 resultados por vez, portanto, se você tiver 1050 itens de chaveiro , você precisará executar esse script 6 vezes no ScriptEditor, além de permitir que o ScriptEditor seja ativado na seção Acessibilidade nas preferências de segurança em:
tell application "System Events"
set maxAttemptsToClick to 200
repeat while exists (processes where name is "SecurityAgent")
if maxAttemptsToClick = 0 then exit repeat
set maxAttemptsToClick to maxAttemptsToClick - 1
tell process "SecurityAgent"
try
click button 2 of window 1
on error
keystroke " "
end try
end tell
delay 0.2
end repeat
end tell
A atualização de link / yosemite acima também possui uma etapa de conversão de ruby do arquivo de texto para CSV. Boa sorte!
ShreevatsaR ressalta nos comentários que essa conversão ruby cobre apenas "senhas da Internet" e não "senhas de aplicativos". Isso ocorre porque o objetivo do script é exportar as "senhas da internet" para o aplicativo 1Password
.
E aqui está uma pergunta e uma resposta de estouro de pilha nas mesmas linhas
O System.keychain está aqui:
security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt
Para permitir que o AppleScript interaja com a caixa de diálogo, Preferências do Sistema -> Preferências de Segurança e Privacidade -> Guia Privacidade, a Opção de Acessibilidade deve ter o "Script Editor.app" ativado
Eu escrevi um script python que converte o despejo de chaves em um arquivo do Excel e pensei em compartilhá-lo com você. Eu escolho o Excel em vez de CSV ou TSV, porque muitas pessoas o instalam e ele simplesmente funciona clicando duas vezes no arquivo. Obviamente, você pode modificar o script para imprimir qualquer outro formato. Eu fiz isso no OS X 10.11 El Capitan, mas também deve funcionar em sistemas operacionais mais antigos.
Como não gosto de armazenar minhas senhas em texto simples no disco rígido, criei um contêiner criptografado usando o aplicativo Utilitário de Disco. Simplesmente abra o Utilitário de Disco (pressione cmd+ Space, digite "disco"). No aplicativo, pressione cmd+ Npara obter uma nova imagem, altere o nome para SEC, altere a criptografia para AES de 256 bits e salve-a na SEC em um diretório de sua escolha. Em seguida, monte o volume clicando duas vezes no arquivo (ou usando o Utilitário de Disco).
Crie um novo arquivo chamado keychain.py no contêiner seguro e cole o código abaixo.
Agora abra o Terminal.app e altere o diretório para o volume criptografado montado: cd /Volumes/SEC
Precisamos do gerenciador de pacotes python para instalar o módulo do Excel (você será solicitado a fornecer sua senha): sudo easy_install pip
Precisamos instalar o módulo Python Excel: sudo pip install xlwt
Agora exporte as senhas usando uma das outras respostas para esta pergunta. Acabei de fazer security dump-keychain -d > keychain.txt
e o spam clicou no botão Permitir enquanto segurava o mouse com a outra mão.
A última etapa é converter o arquivo txt em uma planilha do Excel legível usando o script python: python keychain.py keychain.txt keychain.xls
.
#!/usr/bin/env python
import sys
import os
import re
import xlwt
# Regex to match both generic and internet passwords from a keychain dump
regex = re.compile(
r"""
keychain:\s"(?P<kchn>[^"]+)"\n # absolute path and file of keychain
version:\s(\d\d\d)\n # version
class:\s"(?P<clss>(genp|inet))"\n # generic password or internet password
attributes:\n
(\s*?0x00000007\s<blob>=(?P<name>[^\n]+)\n)? # name
(\s*?0x00000008\s<blob>=(?P<hex8>[^\n]+)\n)? # ? only used at certificates
(\s*?"acct"<blob>=(?P<acct>[^\n]+)\n)? # account
(\s*?"atyp"<blob>=(?P<atyp>[^\n]+)\n)? # account type ("form"), sometimes int
(\s*?"cdat"<timedate>=[^"]*(?P<cdat>[^\n]+)\n)? # datetime created
(\s*?"crtr"<uint32>=(?P<crtr>[^\n]+)\n)? # vendor key with four chars like "aapl"
(\s*?"cusi"<sint32>=(?P<cusi>[^\n]+)\n)? # ? always null
(\s*?"desc"<blob>=(?P<desc>[^\n]+)\n)? # description
(\s*?"gena"<blob>=(?P<gena>[^\n]+)\n)? # ? always null except one rare cases
(\s*?"icmt"<blob>=(?P<icmt>[^\n]+)\n)? # ? some sort of description
(\s*?"invi"<sint32>=(?P<invi>[^\n]+)\n)? # ? always null
(\s*?"mdat"<timedate>=[^"]*(?P<mdat>[^\n]+)\n)? # datetime last modified
(\s*?"nega"<sint32>=(?P<nega>[^\n]+)\n)? # ? always null
(\s*?"path"<blob>=(?P<path>[^\n]+)\n)? # path
(\s*?"port"<uint32>=(?P<port>[^\n]+)\n)? # port number in hex
(\s*?"prot"<blob>=(?P<prot>[^\n]+)\n)? # ? always null
(\s*?"ptcl"<uint32>=(?P<ptcl>[^\n]+)\n)? # protocol but is blob ("http", "https")
(\s*?"scrp"<sint32>=(?P<scrp>[^\n]+)\n)? # ? always null except one rare cases
(\s*?"sdmn"<blob>=(?P<sdmn>[^\n]+)\n)? # used for htaccess AuthName
(\s*?"srvr"<blob>=(?P<srvr>[^\n]+)\n)? # server
(\s*?"svce"<blob>=(?P<svce>[^\n]+)\n)? # ? some sort of description
(\s*?"type"<uint32>=(?P<type>[^\n]+)\n)? # some blob: "iprf", "note"
data:\n
"(?P<data>[^"]*)" # password
""", re.MULTILINE | re.VERBOSE)
# Dictionary used by the clean function (Apple is not always right about the
# types of the field)
field2type = {
"name": "blob",
"hex8": "blob",
"acct": "blob",
"atyp": "simple",
"cdat": "timedate",
"crtr": "uint32",
"cusi": "sint32",
"desc": "blob",
"gena": "blob",
"icmt": "blob",
"invi": "sint32",
"mdat": "timedate",
"nega": "sint32",
"path": "blob",
"port": "uint32",
"prot": "blob",
"ptcl": "blob",
"scrp": "sint32",
"sdmn": "blob",
"srvr": "blob",
"svce": "blob",
"type": "blob",
"data": "simple",
"kchn": "simple",
"clss": "simple"
}
def clean(field, match):
value = match.group(field)
if not value or value == "<NULL>":
# print null values as empty strings
return ""
if field2type[field] == "blob":
# strip " at beginning and end
return value[1:-1]
elif field2type[field] == "timedate":
# convert timedate to the iso standard
value = value[1:-1]
return value[0:4] + "-" + value[4:6] + "-" + value[6:8] + "T" + \
value[8:10] + ":" + value[10:12] + ":" + value[12:14] + "Z" + value[16:19]
elif field2type[field] == "uint32":
# if it really is a hex int, convert it to decimal
value = value.strip()
if re.match("^0x[0-9a-fA-F]+$", value):
return int(value, 16)
else:
return value
else:
# do nothing, just print it as it is
return value
def print_help():
print "Usage: python keychain.py INPUTFILE OUTPUTFILE"
print "Example: python keychain.py keychain.txt keychain.xls"
print " where keychain.txt was created by `security dump-keychain -d > keychain.txt`"
print " When dumping the keychain, you have to click 'Allow' for each entry in your"
print " keychain. Position you mouse over the button and go clicking like crazy."
print "Keychain 0.1: convert an Apple Keychain dump to an Excel (XLS) spreadsheet."
# Check for correct parameters
if len(sys.argv) != 3:
print_help()
sys.exit(1)
elif len(sys.argv) == 3:
if not os.path.isfile(sys.argv[1]):
print "Error: no such file '{0}'".format(sys.argv[1])
print_help()
exit(1)
# Read keychain file
buffer = open(sys.argv[1], "r").read()
print "Read {0} bytes from '{1}'".format(len(buffer), sys.argv[1])
# Create excel workbook and header
wb = xlwt.Workbook()
ws = wb.add_sheet("Keychain")
ws.write(0, 0, "Name")
ws.write(0, 1, "Account")
ws.write(0, 2, "Password")
ws.write(0, 3, "Protocol")
ws.write(0, 4, "Server")
ws.write(0, 5, "Port")
ws.write(0, 6, "Path")
ws.write(0, 7, "Description")
ws.write(0, 8, "Created")
ws.write(0, 9, "Modified")
ws.write(0, 10, "AuthName")
ws.write(0, 11, "AccountType")
ws.write(0, 12, "Type")
ws.write(0, 13, "Keychain")
# Find passwords and add them to the excel spreadsheet
i = 1
for match in regex.finditer(buffer):
ws.write(i, 0, clean("name", match))
ws.write(i, 1, clean("acct", match))
ws.write(i, 2, clean("data", match))
ws.write(i, 3, clean("ptcl", match))
ws.write(i, 4, clean("srvr", match))
ws.write(i, 5, clean("port", match))
ws.write(i, 6, clean("path", match))
ws.write(i, 7, clean("desc", match))
ws.write(i, 8, clean("cdat", match))
ws.write(i, 9, clean("mdat", match))
ws.write(i, 10, clean("sdmn", match))
ws.write(i, 11, clean("atyp", match))
ws.write(i, 12, clean("clss", match))
ws.write(i, 13, clean("kchn", match))
i += 1
wb.save(sys.argv[2])
print "Saved {0} passwords to '{1}'".format(i-1, sys.argv[2])
No OSX 10.10.3, há uma nova maneira de aceitar automaticamente (eu tive problemas durante um caminho de atualização)
Funções Bash (adicionados a qualquer .profile
ou .bash_rc
arquivos)
## At the terminal when you start getting the prompts, type `Accepts` and press enter
function Accepts () {
osascript <<EOF
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent" to click button "Allow" of window 1
delay 0.2
end repeat
end tell
EOF
}
## At the terminal when you start getting the prompts, type `Accepts YourUsername YourPassword` and press enter
function AcceptWithCreds () {
username="$1"
password="$2"
[ -z "${password}" ] && return 1
osascript 2>/dev/null <<EOF
set appName to "${username}"
set appPass to "${password}"
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
if exists (text field 1 of window 1) then
set value of text field 1 of window 1 to appName
set value of text field 2 of window 1 to appPass
end if
end tell
tell process "SecurityAgent" to click button "Allow" of window 1
delay 0.2
end repeat
end tell
EOF
echo 'Finished...'
}
E use este script para despejar seu chaveiro ( sudo ./dump.sh
)
#!/bin/bash
# Run above script in another window
security dump-keychain -d login.keychain > keychain-login.txt
security dump-keychain -d /Library/Keychains/System.keychain > keychain-system.txt
execution error: System Events got an error: osascript is not allowed assistive access.
à linha de comando. A maneira mais fácil de lidar com isso foi colar o código AppleScript no aplicativo Script Editor e executá-lo a partir daí.
osascript is not allowed assistive access
erro pode ser evitado permitindo que o seu aplicativo Terminal em Preferências do Sistema => Segurança e Privacidade => Acessibilidade.
A resposta do @ MichaelStoner é um bom começo, mas falha no OS X 10.10.3 Yosemite, com seu relatório de código AppleScript System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index
.
Depois de brincar um pouco, a seguinte solução funcionou para mim:
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
keystroke " "
end tell
delay 1
end repeat
end tell
Você terá que clicar na caixa de diálogo "Permitir" depois de iniciar isso. Esse código vai demorar um pouco, mas eu aconselho a não diminuir o atraso ("atraso 0,2" me forçou a desligar o meu Mac). Apenas pegue uma xícara de café.
A função de Exportação de Chaveiro é para ITENS, não para todo o chaveiro. Também não permitirá que você exporte a maioria dos itens - é quando você verá a função Exportar acinzentada.
Para copiar as chaves de um mac para outro, use o aplicativo Assistente de Migração .
Ou faça isso manualmente, copiando o arquivo de chaveiro localizado na pasta ~ / Library / Keychains /.
Abra o aplicativo Keychain Access no novo computador e escolha File
> Add Keychain…
.
O security
binário recuperará itens do chaveiro na linha de comando, para que você possa script isso em python para despejar o conteúdo sistematicamente. Realmente depende de qual formato você deseja que os dados e como os utilizará daqui para frente.
Copiar / colar também é uma opção decente se você sabe quanto tempo deseja implementar uma nova solução e se precisa aprender / procurar um programa ou biblioteca existente que despeje o conteúdo no formato escolhido.
O menu de itens de exportação é para exportação de chave pública e / ou privada para a qual existem formatos de arquivo padrão do setor para codificar e proteger os dados conforme apropriado quando armazenados no sistema de arquivos para troca e transporte. Essa função está documentada brevemente na ajuda do Assistente de chaveiro.
Existe uma ferramenta chamada KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 .
Para extrair frase-senha / conta / pagamento / nota segura / chave pública / chave privada / chave simétrica / certificado e assim por diante do chaveiro em silêncio.