एक उबटन में प्रवास करने के लिए, मैं अपने सभी पासवर्ड को निर्यात करना चाहूंगा, उदाहरण के लिए एक सीएसवी फ़ाइल।
किचेन एक्सेस में, मुझे निर्यात मेनू मिला, लेकिन जब यह एक्सेस अनलॉक हो जाता है, तब भी यह निष्क्रिय हो जाता है।
मुझे क्या करना चाहिए?
एक उबटन में प्रवास करने के लिए, मैं अपने सभी पासवर्ड को निर्यात करना चाहूंगा, उदाहरण के लिए एक सीएसवी फ़ाइल।
किचेन एक्सेस में, मुझे निर्यात मेनू मिला, लेकिन जब यह एक्सेस अनलॉक हो जाता है, तब भी यह निष्क्रिय हो जाता है।
मुझे क्या करना चाहिए?
जवाबों:
यह सिर्फ इस बारे में है कि मैंने इसे कई साल पहले कैसे किया था, यह उस Yosemite 10.11.5 के लिए स्क्रिप्ट अपडेट है - लेकिन मैंने इसका परीक्षण नहीं किया है।
एक लिपि जो किचेन के प्रत्येक आइटम को पाठ में सहेजती है:
security dump-keychain -d login.keychain > keychain.txt
एक दूसरा AppleScript आइटम जो "अनुमति दें" बटन पर क्लिक करता है जो किचेचिन से आइटम को पढ़ते समय 1 स्क्रिप्ट ट्रिगर करता है।
[संपादित करें: जुलाई २०१६] इसे १०.११.५ के नोट में अपडेट किया गया है क्योंकि कुछ ने अपने मैक को ०.२ देरी से लॉक करने की सूचना दी है, मैंने स्क्रिप्ट को एक बार में केवल २०० परिणामों तक सीमित करने के लिए सीमित किया है, इस प्रकार यदि आपके पास १०५० किचेन आइटम हैं , आपको ScriptEditor में इस स्क्रिप्ट को 6 बार चलाने की आवश्यकता होगी, आपको ScriptEditor को सुरक्षा प्राथमिकताओं में एक्सेसिबिलिटी सेक्शन में सक्षम करने की अनुमति देनी होगी:
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
फिर ऊपर दिए गए लिंक / योसमाइट अपडेट में पाठ फ़ाइल से CSV तक एक अच्छा रूपांतरण है, सौभाग्य!
श्रीवत्सआर टिप्पणियों में बताते हैं कि यह रूबी रूपांतरण केवल "इंटरनेट पासवर्ड" को कवर करता है न कि "एप्लिकेशन पासवर्ड" को। यह स्क्रिप्ट के उद्देश्य के कारण एप्लिकेशन में "इंटरनेट पासवर्ड" निर्यात करने के लिए है 1Password
।
और यहाँ एक स्टैक अतिप्रवाह प्रश्न और उसी तर्ज पर उत्तर है
System.keychain यहाँ है:
security dump-keychain -d /Library/Keychains/System.keychain > systemkeychain.txt
AppleScript को संवाद बॉक्स के साथ सहभागिता करने में सक्षम करने के लिए सिस्टम वरीयताएँ -> सुरक्षा और गोपनीयता प्राथमिकताएँ -> गोपनीयता टैब, पहुँच विकल्प "स्क्रिप्ट Editor.app" सक्षम होना चाहिए
मैंने एक पाइथन स्क्रिप्ट लिखी है जो किचेन डंप को एक्सेल फाइल में परिवर्तित करती है और सोचा कि मैं इसे आपके साथ साझा करता हूं। मैं CSV या TSV पर एक्सेल का चयन करता हूं क्योंकि बहुत सारे लोगों ने इसे स्थापित किया है और यह फ़ाइल पर डबल क्लिक करके काम करता है। आप किसी अन्य प्रारूप को प्रिंट करने के लिए स्क्रिप्ट को संशोधित कर सकते हैं। मैंने इसे OS X 10.11 El Capitan पर किया था, लेकिन पुराने OS पर भी काम करना चाहिए।
चूँकि मुझे अपने हार्ड ड्राइव पर अपने पासवर्ड को प्लेनटेक्स्ट स्टोर करना पसंद नहीं है, मैंने डिस्क यूटिलिटी ऐप का उपयोग करके एक एन्क्रिप्टेड कंटेनर बनाया। बस डिस्क उपयोगिता खोलें (प्रेस cmd+ Space, "डिस्क" टाइप करें)। एप्लिकेशन में, नई छवि के लिए cmd+ दबाएं N, नाम को एसईसी में बदलें, एन्क्रिप्शन को 256-बिट एईएस में बदलें और अपनी पसंद की निर्देशिका में एसईसी के तहत इसे सहेजें। फिर फ़ाइल पर डबल क्लिक करके (या डिस्क उपयोगिता का उपयोग करके) वॉल्यूम बढ़ाएं।
सुरक्षित कंटेनर में कीचेनहोम नामक एक नई फ़ाइल बनाएं और नीचे दिए गए कोड को पेस्ट करें।
अब Terminal.app खोलें और निर्देशिका को घुड़सवार एन्क्रिप्टेड वॉल्यूम में बदलें: cd /Volumes/SEC
हमें एक्सेल मॉड्यूल स्थापित करने के लिए अजगर पैकेज मैनेजर की आवश्यकता है (आपको अपने पासवर्ड के लिए संकेत दिया जाएगा): sudo easy_install pip
हमें पायथन एक्सेल मॉड्यूल स्थापित करने की आवश्यकता है: sudo pip install xlwt
अब इस प्रश्न के अन्य उत्तरों में से एक का उपयोग करके पासवर्ड निर्यात करें। मैंने अभी-अभी किया security dump-keychain -d > keychain.txt
और स्पैम ने अपने दूसरे हाथ से माउस को पकड़ते हुए Allow बटन पर क्लिक किया।
अंतिम कदम अजगर स्क्रिप्ट का उपयोग करके txt फ़ाइल को पठनीय एक्सेल शीट में बदलना है: 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])
OSX 10.10.3 के रूप में एक नया तरीका है ऑटो-एक्सेप्ट (मैं अपग्रेड पथ के दौरान मुद्दों में भाग गया)
बैश फ़ंक्शंस ( .profile
या तो या .bash_rc
फ़ाइलों में जोड़े गए )
## 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...'
}
और अपने कीरिंग को डंप करने के लिए इस स्क्रिप्ट का उपयोग करें ( 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.
कमांड लाइन पर आ गया। इससे निपटने का सबसे आसान तरीका मुझे स्क्रिप्ट एडिटर ऐप में AppleScript कोड पेस्ट करना और इसे वहीं से चलाना था।
osascript is not allowed assistive access
त्रुटि सिस्टम प्राथमिकताओं में अपने टर्मिनल अनुप्रयोग की अनुमति देकर बचा जा सकता है => सुरक्षा और गोपनीयता => सरल उपयोग।
@ MichaelStoner का जवाब एक अच्छी शुरुआत है, लेकिन यह अपने AppleScript कोड रिपोर्टिंग के साथ OS X 10.10.3 Yosemite पर विफल रहता है System Events got an error: Can’t get group 1 of window 1 of process "SecurityAgent". Invalid index
।
थोड़ा सा खेलने के बाद, निम्नलिखित समाधान ने मेरे लिए काम किया:
tell application "System Events"
repeat while exists (processes where name is "SecurityAgent")
tell process "SecurityAgent"
keystroke " "
end tell
delay 1
end repeat
end tell
इसे शुरू करने के बाद आपको "अनुमति" संवाद पर क्लिक करना होगा। इस कोड में थोड़ा समय लगेगा, लेकिन मैं देरी को कम करने के खिलाफ सलाह देता हूं ("देरी 0.2" ने मुझे मेरा मैक-फोर्स-पावरऑफ बना दिया)। बस, एक कप कॉफी मिल जाएगी।
किचेन एक्सपोर्ट फंक्शन ITEMS के लिए है, पूरे किचेन के लिए नहीं। यह आपको अधिकांश वस्तुओं को निर्यात करने की अभिलाषा भी नहीं कराता है- जब आप निर्यात समारोह को धूसर कर देखेंगे।
चाबी का गुच्छा एक मैक से दूसरे मैक माइग्रेशन असिस्टेंट ऐप का उपयोग करने के लिए ।
या इसे मैन्युअल रूप से ~ / लाइब्रेरी / किचेन / फ़ोल्डर में स्थित कुंजी श्रृंखला फ़ाइल की प्रतिलिपि बनाकर कर सकते हैं।
नए कंप्यूटर पर किचेन एक्सेस ऐप खोलें और File
> चुनें Add Keychain…
।
security
द्विआधारी कमांड लाइन से कीचेन से आइटम को पुनः प्राप्त होगा, ताकि आप सकता है स्क्रिप्ट अजगर में है कि सामग्री को व्यवस्थित डंप करने के लिए। यह वास्तव में इस बात पर निर्भर करता है कि आप किस प्रारूप में डेटा चाहते हैं और आगे जाने के लिए आप इसका उपयोग कैसे करेंगे।
कॉपी / पेस्ट भी एक सभ्य विकल्प है यदि आप जानते हैं कि आप एक नए समाधान को लागू करने के लिए कितने समय तक देखभाल करते हैं और क्या आपको मौजूदा प्रोग्राम या लाइब्रेरी को सीखने / खोजने की आवश्यकता है जो आपके चुने हुए प्रारूप में सामग्री को डंप कर देगा।
निर्यात आइटम मेनू सार्वजनिक और / या निजी कुंजी निर्यात के लिए है जिसके लिए दोनों को एन्कोड और ट्रांसपोर्ट के लिए फाइल सिस्टम में संग्रहीत करने पर उपयुक्त के रूप में डेटा को संरक्षित करने के लिए उद्योग मानक फ़ाइल प्रारूप हैं। उस फंक्शन को कीचेन असिस्टेंट की मदद से संक्षेप में प्रलेखित किया गया है।
एक टूल कॉल है KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486 ।
पासफ़्रेज़ / खाता / भुगतान / सुरक्षित नोट / PublicKey / PrivateKey / SymmetricKey / प्रमाणपत्र और इत्यादि निकालने के लिए मौन में किचेन से।