untuk bermigrasi ke Ubutun, saya ingin mengekspor semua kata sandi saya, misalnya file CSV.
Di Keychain Access, saya menemukan menu ekspor, tetapi selalu dinonaktifkan, bahkan ketika akses tidak dikunci.
Apa yang harus saya lakukan?
untuk bermigrasi ke Ubutun, saya ingin mengekspor semua kata sandi saya, misalnya file CSV.
Di Keychain Access, saya menemukan menu ekspor, tetapi selalu dinonaktifkan, bahkan ketika akses tidak dikunci.
Apa yang harus saya lakukan?
Jawaban:
Ini hanya tentang bagaimana saya melakukannya bertahun-tahun yang lalu, ini adalah pembaruan skrip untuk Yosemite 10.11.5 - tapi saya belum mengujinya.
Sebuah skrip yang menyimpan setiap item dalam Keychain ke teks:
security dump-keychain -d login.keychain > keychain.txt
Item AppleScript kedua yang mengklik tombol "Izinkan" yang dipicu skrip 1 saat membaca item dari KeyChain.
[Sunting: Juli 2016] Ini telah diperbarui ke catatan 10.11.5 karena beberapa telah melaporkan mengunci Mac mereka dengan penundaan 0,2, saya telah membatasi skrip untuk hanya memproses 200 hasil sekaligus, jadi jika Anda memiliki 1050 item gantungan kunci , Anda harus menjalankan skrip ini 6 kali di ScriptEditor, Anda juga harus mengizinkan ScriptEditor diaktifkan di bagian Aksesibilitas di preferensi keamanan di:
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
Kemudian pembaruan tautan / yosemite di atas juga memiliki langkah konversi ruby dari file teks ke CSV, Selamat mencoba!
ShreevatsaR menunjukkan dalam komentar bahwa konversi ruby ini hanya mencakup "kata sandi internet" dan bukan "kata sandi aplikasi". Ini karena tujuan dari skrip ini adalah untuk mengekspor "kata sandi internet" ke dalam aplikasi 1Password
.
Dan inilah pertanyaan dan jawaban stack overflow di sepanjang baris yang sama
System.keychain ada di sini:
security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt
Untuk mengaktifkan AppleScript untuk berinteraksi dengan kotak dialog Preferensi Sistem -> Preferensi Keamanan & Privasi -> Tab Privasi, Opsi Aksesibilitas harus mengaktifkan "Script Editor.app" diaktifkan
Saya menulis skrip python yang mengubah dump gantungan kunci ke file Excel dan berpikir saya membaginya dengan Anda. Saya memilih Excel daripada CSV atau TSV karena banyak orang menginstalnya dan hanya berfungsi dengan mengklik dua kali pada file. Tentu saja Anda dapat memodifikasi skrip untuk mencetak format lain. Saya melakukan ini pada OS X 10.11 El Capitan, tetapi harus bekerja pada OS yang lebih tua juga.
Karena saya tidak suka menyimpan plaintext kata sandi di hard drive saya, saya membuat wadah terenkripsi menggunakan aplikasi Disk Utility. Cukup buka Disk Utility (tekan cmd+ Space, ketik "disk"). Di aplikasi, tekan cmd+ Nuntuk gambar baru, ubah nama menjadi SEC, ubah enkripsi ke 256-Bit AES dan simpan di bawah SEC di direktori pilihan Anda. Kemudian pasang volume dengan menggandakan klik pada file (atau menggunakan Disk Utility).
Buat file baru bernama keychain.py di wadah aman dan tempel kode di bawah ini.
Sekarang buka Terminal.app dan ubah direktori menjadi volume terenkripsi yang terpasang: cd /Volumes/SEC
Kami membutuhkan manajer paket python untuk menginstal modul Excel (Anda akan diminta kata sandi Anda): sudo easy_install pip
Kita perlu menginstal modul Python Excel: sudo pip install xlwt
Sekarang ekspor kata sandi menggunakan salah satu jawaban lain untuk pertanyaan ini. Saya baru saja melakukannya security dump-keychain -d > keychain.txt
dan mengklik spam pada tombol Allow sambil memegang mouse dengan tangan saya yang lain.
Langkah terakhir adalah mengonversi file txt ke lembar Excel yang dapat dibaca menggunakan skrip 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])
Pada OSX 10.10.3 ada cara baru untuk menerima otomatis (saya mengalami masalah selama jalur peningkatan)
Fungsi Bash (ditambahkan ke salah satu .profile
atau .bash_rc
file)
## 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...'
}
Dan gunakan skrip ini untuk membuang keyring Anda ( 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.
di baris perintah. Cara termudah yang saya temukan untuk mengatasinya adalah dengan menempelkan kode AppleScript ke aplikasi Script Editor dan menjalankannya dari sana.
osascript is not allowed assistive access
kesalahan dapat dihindari dengan memungkinkan aplikasi Terminal Anda di System Preferences => Keamanan & Privasi => Aksesibilitas.
@ MichaelStoner jawaban adalah awal yang baik, tetapi gagal pada OS X 10.10.3 Yosemite, dengan pelaporan kode AppleScript-nya System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index
.
Setelah bermain-main sedikit, solusi berikut ini bekerja untuk saya:
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
keystroke " "
end tell
delay 1
end repeat
end tell
Anda harus mengklik pada dialog "Izinkan" setelah memulai ini. Kode ini akan memakan waktu cukup lama, tetapi saya menyarankan agar tidak menurunkan penundaan ("delay 0.2" membuat saya memaksa-matikan Mac saya). Dapatkan secangkir kopi.
Fungsi Ekspor Keychain adalah untuk ITEM, bukan untuk keseluruhan keychain. Ini juga tidak akan membiarkan Anda mengekspor sebagian besar Item-yaitu ketika Anda akan melihat fungsi Ekspor berwarna abu-abu.
Untuk menyalin gantungan kunci dari satu mac ke yang lain gunakan aplikasi Migration Assistant .
Atau lakukan secara manual dengan menyalin file gantungan kunci yang terdapat di folder ~ / Library / Keychains /.
Buka aplikasi Keychain Access di komputer baru dan pilih File
> Add Keychain…
.
The security
biner akan mengambil barang-barang dari keychain dari baris perintah, sehingga Anda bisa script yang di python untuk membuang isi sistematis. Itu benar-benar tergantung pada format apa yang Anda inginkan data dan bagaimana Anda akan menggunakannya di masa depan.
Salin / tempel juga merupakan opsi yang layak jika Anda tahu berapa lama Anda ingin menerapkan solusi baru dan apakah Anda perlu mempelajari / mencari program atau pustaka yang ada yang akan membuang konten ke format yang Anda pilih.
Menu item ekspor adalah untuk ekspor kunci publik dan / atau swasta yang format file standar industri untuk menyandikan dan melindungi data yang sesuai ketika disimpan ke sistem file untuk pertukaran dan transportasi. Fungsi itu didokumentasikan secara singkat dalam bantuan untuk Asisten Keychain.
Ada alat panggilan KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 .
Untuk mengekstrak Frasa Sandi / Akun / Pembayaran / Catatan Aman / PublicKey / PrivateKey / SymmetricKey / Sertifikat dan sebagainya dari Keychain dengan tenang.