निर्यात चाबी का गुच्छा


23

एक उबटन में प्रवास करने के लिए, मैं अपने सभी पासवर्ड को निर्यात करना चाहूंगा, उदाहरण के लिए एक सीएसवी फ़ाइल।

किचेन एक्सेस में, मुझे निर्यात मेनू मिला, लेकिन जब यह एक्सेस अनलॉक हो जाता है, तब भी यह निष्क्रिय हो जाता है।

मुझे क्या करना चाहिए?


इस प्रश्न / उत्तर को भी देखें: apple.stackexchange.com/a/185980/129823
Marcel Waldvogel

जवाबों:


18

यह सिर्फ इस बारे में है कि मैंने इसे कई साल पहले कैसे किया था, यह उस Yosemite 10.11.5 के लिए स्क्रिप्ट अपडेट है - लेकिन मैंने इसका परीक्षण नहीं किया है।

  1. एक लिपि जो किचेन के प्रत्येक आइटम को पाठ में सहेजती है:

    security dump-keychain -d login.keychain > keychain.txt
    
  2. एक दूसरा 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" सक्षम होना चाहिए सिस्टम वरीयताएँ -> सुरक्षा और गोपनीयता प्राथमिकताएँ -> गोपनीयता टैब, पहुँच विकल्प पर प्रकाश डाला गया


बहुत बहुत धन्यवाद! यह ठीक है। मैं अभी नहीं जानता कि मैं अपने System.keychain को क्यों निर्यात नहीं कर सकता। लेकिन ज्यादातर किचेन में login.keychain भी होता है।
मैयूल

उस किचेन आइटम पथ के लिए अद्यतन देखें, लेकिन यह प्रत्येक आइटम के लिए उपयोगकर्ता नाम और पासवर्ड मांग सकता है, जो हो सकता है कि अनुमति दें स्क्रिप्ट प्रदान करने के लिए संशोधित किया जा सकता है।
माइकलसनटन

सोचता। AppleScript में मेरी कोई योग्यता नहीं है। मेरे पास इस किचेन में कुछ पासवर्ड हैं, इसलिए मैं अपना मुख्य पासवर्ड कई बार टाइप करूंगा।
मैयूल

यदि आपको कोई आउटपुट नहीं मिलता है, तो चाबी के समान डायरेक्टरी के भीतर कमांड चलाने का प्रयास करें।
रोक् स्ट्रनिसा

6
AppleScript ने मेरे लिए OS X 10.10.3 Yosemite पर काम नहीं किया, यह दावा करते हुए कि "सिस्टम इवेंट्स को एक त्रुटि मिली: प्रक्रिया 1 की विंडो 1 का ग्रुप 1 नहीं मिल सकता है \" SecurityAgent \ "। अमान्य इंडेक्स"।
मार्सेल वाल्डवोगेल

8

मैंने एक पाइथन स्क्रिप्ट लिखी है जो किचेन डंप को एक्सेल फाइल में परिवर्तित करती है और सोचा कि मैं इसे आपके साथ साझा करता हूं। मैं CSV या TSV पर एक्सेल का चयन करता हूं क्योंकि बहुत सारे लोगों ने इसे स्थापित किया है और यह फ़ाइल पर डबल क्लिक करके काम करता है। आप किसी अन्य प्रारूप को प्रिंट करने के लिए स्क्रिप्ट को संशोधित कर सकते हैं। मैंने इसे OS X 10.11 El Capitan पर किया था, लेकिन पुराने OS पर भी काम करना चाहिए।

  1. चूँकि मुझे अपने हार्ड ड्राइव पर अपने पासवर्ड को प्लेनटेक्स्ट स्टोर करना पसंद नहीं है, मैंने डिस्क यूटिलिटी ऐप का उपयोग करके एक एन्क्रिप्टेड कंटेनर बनाया। बस डिस्क उपयोगिता खोलें (प्रेस cmd+ Space, "डिस्क" टाइप करें)। एप्लिकेशन में, नई छवि के लिए cmd+ दबाएं N, नाम को एसईसी में बदलें, एन्क्रिप्शन को 256-बिट एईएस में बदलें और अपनी पसंद की निर्देशिका में एसईसी के तहत इसे सहेजें। फिर फ़ाइल पर डबल क्लिक करके (या डिस्क उपयोगिता का उपयोग करके) वॉल्यूम बढ़ाएं।

  2. सुरक्षित कंटेनर में कीचेनहोम नामक एक नई फ़ाइल बनाएं और नीचे दिए गए कोड को पेस्ट करें।

  3. अब Terminal.app खोलें और निर्देशिका को घुड़सवार एन्क्रिप्टेड वॉल्यूम में बदलें: cd /Volumes/SEC

  4. हमें एक्सेल मॉड्यूल स्थापित करने के लिए अजगर पैकेज मैनेजर की आवश्यकता है (आपको अपने पासवर्ड के लिए संकेत दिया जाएगा): sudo easy_install pip

  5. हमें पायथन एक्सेल मॉड्यूल स्थापित करने की आवश्यकता है: sudo pip install xlwt

  6. अब इस प्रश्न के अन्य उत्तरों में से एक का उपयोग करके पासवर्ड निर्यात करें। मैंने अभी-अभी किया security dump-keychain -d > keychain.txtऔर स्पैम ने अपने दूसरे हाथ से माउस को पकड़ते हुए Allow बटन पर क्लिक किया।

  7. अंतिम कदम अजगर स्क्रिप्ट का उपयोग करके 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])

वाह, यह वास्तव में पूरी तरह से लग रहा है। मैं इसे एक शॉट देने जा रहा हूं, हालांकि मुझे अभी भी सुरक्षित नोट्स और ऐप पासवर्ड के लिए एक समाधान की आवश्यकता है ... :( यह मुझे हालांकि एक लंबा रास्ता तय करना चाहिए।
hepcat72

सुरक्षित नोटों का यह उत्कृष्ट तोड़ पाया: stackoverflow.com/questions/22370552/…
hepcat72

अब मुझे केवल यह पता लगाने की आवश्यकता है कि एक rtfd का निर्यात कैसे बनाया जाए जिसमें एक एम्बेडेड छवि शामिल हो। मेरे पास स्क्रीन-कैप्स में पासवर्ड के साथ कुछ नोट्स हैं।
hepcat72

इसके अलावा, प्लस एक और thx
एहिमे

5

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 कोड पेस्ट करना और इसे वहीं से चलाना था।
इवान

AppleScripts 10.10.5 पर काम नहीं कर रहा है
oarfish

1
इसने मेरे लिए OS X El Capitan 10.11.6 के तहत काम किया। सुनिश्चित करें कि स्क्रिप्ट से अंतिम चरित्र (बैकटिक) की प्रतिलिपि न करें। osascript is not allowed assistive accessत्रुटि सिस्टम प्राथमिकताओं में अपने टर्मिनल अनुप्रयोग की अनुमति देकर बचा जा सकता है => सुरक्षा और गोपनीयता => सरल उपयोग।
नियॉन 1

यह Mojave पर काम नहीं करता है। AcceptWithCreds बस कुछ भी किए बिना, खत्म कर देता है।
oarfish

4

@ 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" ने मुझे मेरा मैक-फोर्स-पावरऑफ बना दिया)। बस, एक कप कॉफी मिल जाएगी।


1
अंतरिक्ष -> कीस्ट्रोक "" केवल तभी काम करता है जब आपके पास सिस्टम प्राथमिकताएं हों -> कीबोर्ड प्राथमिकताएं -> शॉर्टकट टैब, निचला विकल्प "पूर्ण कीबोर्ड एक्सेस" और फिर "सभी नियंत्रण" चयनित
माइकलसनर

3

किचेन एक्सपोर्ट फंक्शन ITEMS के लिए है, पूरे किचेन के लिए नहीं। यह आपको अधिकांश वस्तुओं को निर्यात करने की अभिलाषा भी नहीं कराता है- जब आप निर्यात समारोह को धूसर कर देखेंगे।

चाबी का गुच्छा एक मैक से दूसरे मैक माइग्रेशन असिस्टेंट ऐप का उपयोग करने के लिए ।

या इसे मैन्युअल रूप से ~ / लाइब्रेरी / किचेन / फ़ोल्डर में स्थित कुंजी श्रृंखला फ़ाइल की प्रतिलिपि बनाकर कर सकते हैं।

नए कंप्यूटर पर किचेन एक्सेस ऐप खोलें और File> चुनें Add Keychain…


1
धन्यवाद, लेकिन मैंने कहा "एक दूसरे ओएस के लिए" ... मैं ओएस एक्स को छोड़ना चाहता हूं ...
Ma 8eul

संपादन और स्पष्टता के लिए धन्यवाद। अन्य ओएस भ्रामक था। तो आप इसे एक पाठ फ़ाइल (CSV) के रूप में चाहते हैं?
Ruskes

1
हाँ, एक सीएसवी ठीक है ...
Ma Juleul

1

securityद्विआधारी कमांड लाइन से कीचेन से आइटम को पुनः प्राप्त होगा, ताकि आप सकता है स्क्रिप्ट अजगर में है कि सामग्री को व्यवस्थित डंप करने के लिए। यह वास्तव में इस बात पर निर्भर करता है कि आप किस प्रारूप में डेटा चाहते हैं और आगे जाने के लिए आप इसका उपयोग कैसे करेंगे।

कॉपी / पेस्ट भी एक सभ्य विकल्प है यदि आप जानते हैं कि आप एक नए समाधान को लागू करने के लिए कितने समय तक देखभाल करते हैं और क्या आपको मौजूदा प्रोग्राम या लाइब्रेरी को सीखने / खोजने की आवश्यकता है जो आपके चुने हुए प्रारूप में सामग्री को डंप कर देगा।

निर्यात आइटम मेनू सार्वजनिक और / या निजी कुंजी निर्यात के लिए है जिसके लिए दोनों को एन्कोड और ट्रांसपोर्ट के लिए फाइल सिस्टम में संग्रहीत करने पर उपयुक्त के रूप में डेटा को संरक्षित करने के लिए उद्योग मानक फ़ाइल प्रारूप हैं। उस फंक्शन को कीचेन असिस्टेंट की मदद से संक्षेप में प्रलेखित किया गया है।


इसकी स्क्रिप्ट के अलावा और कोई रास्ता नहीं है? ठीक है, मैं इस बाइनरी को
देखूंगा

1
यदि आप अपनी पोस्ट को यह बताने के लिए संपादित कर सकते हैं कि नया OS और वह cvs एक प्रारूप है जिसे आप पसंद करते हैं, तो संभवतः मेरे पास आपके लिए कुछ और विचार होंगे। के रूप में पूछा, यह बहुत अस्पष्ट है ...
bmike

0

एक टूल कॉल है KeychaindumpPro https://hackforums.net/showthread.php?tid=5803486

पासफ़्रेज़ / खाता / भुगतान / सुरक्षित नोट / PublicKey / PrivateKey / SymmetricKey / प्रमाणपत्र और इत्यादि निकालने के लिए मौन में किचेन से।


2
आपको ऐसी लिंक नहीं डालनी चाहिए, जिसमें उपयोगकर्ता को सामग्री देखने के लिए खाता बनाने की आवश्यकता हो। बेहतर होगा कि आप लिंक की सामग्री को रीफ़्रेश करें।
डेविड एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.