পাসফ্রেজ পরীক্ষা করতে কীভাবে জিপিজি কমান্ড-লাইন ব্যবহার করবেন তা সঠিক


90

আমি এর সাথে ব্যাকআপগুলি স্বয়ংক্রিয় করার চেষ্টা করছি duplicity, কিন্তু যখন আমি ফলাফলটি পরীক্ষা করি তখন আমি পাই

জিপিজি: সর্বজনীন কী ডিক্রিপশন ব্যর্থ হয়েছে: খারাপ পাসফ্রেজ

আমি যে পাসফ্রেজটি ব্যবহার করছি তা আসলে সংশ্লিষ্ট জিপিজি সিক্রেট-কি-এর সাথে সম্পর্কিত পাসফ্রেজ কিনা তা যাচাই করতে চাই, তবে "এনক্রিপ্ট বা ডিক্রিপ্ট না করে বলার জন্য জিপিজি কমান্ড-লাইন বিকল্পগুলিতে আমি কোনওভাবেই দেখতে পাচ্ছি না Just আমি সঠিক পাসফ্রেজটি ব্যবহার করছি।

এটি প্রস্তাব দেয় যে সম্ভবত আমি (এখনও আবার) জ্ঞানু প্রাইভেসি গার্ডকে ভুল বোঝাবুঝি করছি। (আমি কান্নাকাটি না করা পর্যন্ত আমাকে তামাশা করার পূর্বসূরী রয়েছে has)

পাসফ্রেজ যাচাই করতে জিপিজি জিজ্ঞাসা করা কি বোধগম্য? যদি তাই হয়, কিভাবে?

উত্তর:


115

এটি করার জন্য কোনও অন্তর্নির্মিত পদ্ধতি নেই, তবে এমন একটি পরীক্ষা তৈরি করা যথেষ্ট সহজ যা কোনও কিছু সংশোধন করে না এবং আপনাকে কেবল আপনার পাসফ্রেজ পরীক্ষা করতে দেয়।

আপনি নির্দিষ্ট করেন নি, তাই আমি ধরে নেব আপনি ভি 2 এর চেয়ে কম GnuPG সংস্করণ ব্যবহার করছেন এবং আপনার কমান্ডলাইন ইন্টারপ্রেটারের জন্য বাশের সাথে লিনাক্সে রয়েছেন।

আমি কমান্ডটি এখানে দেব এবং নীচে আমি প্রতিটি অংশ কী করে তা ব্যাখ্যা করব - (দ্রষ্টব্য: নীচে GnuPG সিরিজের সংস্করণ 1 এর জন্য রয়েছে, GnuPG সিরিজ v2 এর জন্য নীচে দেখুন)

echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

এটি প্রথমে যা রয়েছে তা দিয়ে GnuPG এ স্বাক্ষর করার জন্য কিছু পাঠ্য পাইপ করুন echo "1234" |- কারণ আমরা সত্যিকার অর্থে কোনও কিছুতে স্বাক্ষর করতে চাই না, এটি কেবল একটি পরীক্ষা, তাই আমরা কিছু অকেজো পাঠ্যতে স্বাক্ষর করব।

এরপরে, আমরা জিপিজি-কে বলি যে এর সাথে কী এজেন্টটি ব্যবহার না করা --no-use-agent; এটি পরে গুরুত্বপূর্ণ কারণ আপনার কী এজেন্টের উপর নির্ভর করে এটি সাফল্যে "0" ফিরিয়ে দিতে পারে না এবং আমরা যা করতে চাই তা হ'ল - আপনার পাসফ্রেজের সাফল্য যাচাই করুন।

এরপরে, আমরা জিপিজি-কে স্বাক্ষরিত ডেটা সরাসরি /dev/nullফাইলে রাখার জন্য বলি , যার অর্থ আমরা এটিকে বাতিল করে দিচ্ছি এবং ফলাফলটি টার্মিনালে লিখব না - দ্রষ্টব্য: আপনি যদি লিনাক্স / ইউনিক্সের কোনও বৈকল্পিক ব্যবহার না করেন তবে এই ফাইলটি উপস্থিত নাও থাকতে পারে। উইন্ডোগুলিতে আপনাকে কেবল -o /dev/nullঅংশটি বাদ দিয়ে স্ক্রিনে স্বাক্ষরিত ডেটা লেখার অনুমতি দিতে হতে পারে ।

এরপরে, আমরা কীটি ব্যবহার করে আমাদের পরীক্ষাটি করতে চাই তা নির্দিষ্ট করি --local-user 012345। আপনি সর্বাধিক নির্দিষ্টতার জন্য কিআইডি ব্যবহার করতে পারেন বা আপনার ব্যবহারকারীর নাম ব্যবহার করতে পারেন, যেটি আপনার প্রয়োজন অনুসারে সেরা স্যুট।

এরপরে আমরা উল্লেখ করব -as, যা আসকি আউটপুট মোড সক্ষম করে এবং স্বাক্ষরের জন্য প্রসঙ্গ মোড সেট করে। -পরে শুধু টি GnuPG বলে তথ্য মান-ইন, যা কমান্ড আমরা দিয়েছিলাম খুব প্রথম অংশ থেকে সাইন ইন করা পেতে echo "1234" |

এবং সর্বশেষে, আমাদের কাছে && echo "A message that indicates success""&&" এর অর্থ, পূর্ববর্তী কমান্ডটি সফল হলে এই বার্তাটি মুদ্রণ করুন। এটি কেবল স্পষ্টতার জন্য যুক্ত করা হয়েছে, কারণ উপরের কমান্ডটির সাফল্য অন্যথায় কোনও আউটপুট দ্বারা নির্দেশিত হবে না।

আমি আশা করি যে এটি আপনার পক্ষে যা চলছে তা বোঝার জন্য যথেষ্ট স্পষ্ট এবং আপনি এটি কীভাবে ব্যবহার করতে পারেন তা আপনি করতে চান এমন টেস্টিংটি করে। কোনও অংশ যদি অস্পষ্ট থাকে বা আপনি বুঝতে না পারেন তবে আমি স্পষ্ট করে খুশি হব। শুভকামনা!

[সম্পাদনা] - আপনি যদি GnuPG v2 ব্যবহার করে থাকেন তবে উপরের কমান্ডটি কিছুটা সংশোধন করা দরকার যেমন:

echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

কারণটি হ'ল, GnuPG v2 কোনও এজেন্টের মাধ্যমে পাসফ্রেজটি পুনরুদ্ধার করার প্রত্যাশা করে, সুতরাং আমরা এজেন্টটির ব্যবহারটি অক্ষম করতে পারি না --no-use-agentএবং পছন্দসই প্রভাব ফেলতে পারি; পরিবর্তে আমাদের GnuPG v2 কে বলতে হবে যে আমরা একটি "ব্যাচ" প্রক্রিয়া চালাতে চাই এবং বিকল্পটি ব্যবহার করে STDIN (স্ট্যান্ডার্ড ইন) থেকে পাসফ্রেজটি পুনরুদ্ধার করতে চাই --passphrase-fd 1


11
এটি gpg2 এর সাথে কাজ করে না, কারণ এটি সর্বদা এজেন্টের প্রয়োজন। এছাড়াও ncurses এজেন্ট পাইপ ইনপুট দ্বারা একরকম বিভ্রান্ত হয়। সুতরাং আমি সবেমাত্র ব্যবহার করেছি gpg --local-user <KEYID> -as। এটি কেবল এজেন্টকে পাসফ্রেজ জিজ্ঞাসা করতে দেয় এবং আপনাকে এটি সঠিক কিনা তা জানায় (তারপরে কিছুই হয় না)।
বুবুআইআইইসি

4
আপনি বেশিরভাগ অংশেই সঠিক বুবুলসি; পাস করা অপশনগুলিতে সামান্য পরিবর্তন করার সাথে সাথে আপনি জিপিজি 2 ব্যবহার করে অনুরূপ ফলাফল পেতে পারেন। আমি জিপিজি এবং জিপিজি 2 এর মধ্যে পার্থক্য সমর্থন করার জন্য আমার উত্তরটি পরিবর্তন করেছি।
কাইলহফ

4
GnuPG 2.1 এর জন্য এটি ব্যবহার করুন:gpg -o /dev/null --local-user <KEYID> -as <(echo 1234) && echo "The correct passphrase was entered for this key"
স্টারফাই

6
MacOS 10.12.6 এ আমার জন্য, কোনও পরিবর্তনের পাসফ্রেজের অনুরোধ জানায় না এবং নির্বিশেষে একটি সাফল্যের বার্তা ফেরত দেয়।
স্ট্যান জেমস

4
--passphrase-fd 1? স্টাডাউট থেকে পড়া? এটি আমার জন্য কাজ করে: gpg2 -aso - <(echo 1234); echo $?echo RELOADAGENT | gpg-connect-agentপাসফ্রেজগুলি ভুলে যেতে ব্যবহার করুন।
এক্স-ইউরি

20

পাসফ্রেজ ঠিক আছে কিনা তা পরীক্ষা করার জন্য এটি একটি ছোট কমান্ড লাইন:

gpg --export-secret-keys -a <KEYID> > /dev/null && echo OK

না, যদি আপনার একটি থাকে gpg-agent সক্রিয় থাকে (যা বেশিরভাগ লোকের থাকে) এবং আপনি সঠিকভাবে লগ ইন করেছেন তবে এটি পাসফ্রেজের জন্য জিজ্ঞাসা করবে না।
ফোকি

5

আমার কাছে পাসফ্রেজ চেক করার সরল উপায় হ'ল gpg --passwdশর্টহ্যান্ড ব্যবহার করা । এটি পাসফ্রেজ পরিবর্তন করার চেষ্টা করে এবং পদক্ষেপটি হল পুরানো পাসফ্রেজটি নিশ্চিত করা এবং তারপরে আপনি নতুন পাসফ্রেজ প্রম্পটে 'বাতিল' ক্লিক করতে পারেন এবং এটি পাসফ্রেজ অক্ষত রাখে।

gpg --passwd <your-user-id>

এটি সর্বাধিক সরল পদ্ধতি যা আপনার gpg-agentসক্রিয় রয়েছে কিনা তা নির্বিশেষে কাজ করে ।
ফোকি

2

সতর্কতা gpg -o /dev/nullএখানে শীর্ষ উত্তরের পরামর্শ অনুসারে প্রতিধ্বনি ব্যবহার করবেন না । এর ফলে / dev / নালকে অবৈধ অনুমতি এবং /dev/nullফাইলটি দূষিত করা হবে। এটি প্রমাণ করার জন্য এই কমান্ডটি চালানোর সময় আপনি / dev / নাল ফাইলের অনুমতি যাচাই করতে পারেন।

আপনি এটি ব্যবহার করতে পারেন:

echo "1234" | gpg -q --batch --status-fd 1 --sign --local-user $KEY_ID --passphrase-fd 0 > /dev/null

আমি এর জন্য বাশ স্ক্রিপ্টও তৈরি করেছি (এটি সেন্টোস 8 এর সাথে কাজ করছে)। এই স্ক্রিপ্টটি পাসফ্রেজের জন্য জিজ্ঞাসা করবে, যদি এটি অবৈধ হয় তবে এটি বৈধ পাসফ্রেজ ইনপুট করতে বলবে। এছাড়াও যদি আপনি কোনও যুক্তি হিসাবে ভুল বা অ-বিদ্যমান KEY_ID ইনপুট করেন তবে এটি এটিকেও যাচাই করতে পারে:

#!/bin/bash
# usage ./gpgcron KEYID   | ./gpgcron 2B705B8B6FA943B1
script_path=$(dirname $(realpath -s $0))
script_name=$(basename -- "$0")
GPG_CACHE_BIN="/usr/libexec/gpg-preset-passphrase"
KEY_ID=$1
KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*')
RETVAL=$?
if [[ $RETVAL -ne 0 || -z $KEY_ID ]]; then
    echo "Please provide correct KEY_ID. Example ./$script_name KEY_ID"
    exit 1
fi

export GPG_TTY=$(tty)

function set_gpg_cachepass {
    read -s -p "[$script_name | input]: Enter passphrase to cache into gpg-agent: " PASSPHRASE; echo
    $GPG_CACHE_BIN -c $KEY_GRIP <<< $PASSPHRASE
    RETVAL=$?
    echo "[$script_name | info ]: gpg-preset-passphrase return code: [$RETVAL]"
    if [ $RETVAL = 0 ]; then
        echo "[$script_name | info ]: A passphrase has been set and cached in gpg-agent"
        echo "[$script_name | info ]: Paraphrase set return code: [$RETVAL]"
        gpg_validatepass
    else
        echo "[$script_name | info ]: Unsuccessful error occured: [$RETVAL]"
        set_gpg_cachepass
    fi
}

function gpg_validatepass {
    echo "[$script_name | info ]: Validating passphrase cached in gpg-agent ..."
    echo "1234" | gpg -q --batch --status-fd 1 --sign --local-user $KEY_ID --passphrase-fd 0 > /dev/null
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo "[$script_name | info ]: OK, valid passphrase has been cached in gpg-agent"
    else
        echo "[$script_name | info ]: Warning, invalid passphrase or no passphrase is cached in gpg-agent"
        set_gpg_cachepass
    fi
}

RES=$(echo "KEYINFO --no-ask $KEY_GRIP Err Pmt Des" | gpg-connect-agent | awk '{ print $7 }')
if [ "$RES" == "1" ]; then
    echo "[$script_name | info ]: OK, passphrase is already cached in gpg agent for KEY_ID of [$KEY_ID]"
    gpg_validatepass
else
    echo "[$script_name | info ]: Warning, no passphrase is cached in gpg agent for KEY_ID of [$KEY_ID]"
    set_gpg_cachepass
fi

কোনও পাসওয়ার্ড জিপিজি-এজেন্টে ক্যাশে না থাকলে নমুনা আউটপুট:

[root@earth gpg]# ./gpgcron 2B705B8B6FA943B2
[gpgcron | info ]: Warning, no passphrase is cached in gpg agent for KEY_ID of [2B705B8B6FA943B2]
[gpgcron | input]: Enter passphrase to cache into gpg-agent:

অবৈধ পাসফ্রেজ প্রবেশ করা হলে নমুনা আউটপুট (এটি জিজ্ঞাসা করেই থাকবে):

[root@earth gpg]# ./gpgcron 2B705B8B6FA943B2
[gpgcron | info ]: OK, passphrase is already cached in gpg agent for KEY_ID of [2B705B8B6FA943B2]
[gpgcron | info ]: Validating passphrase cached in gpg-agent ...
gpg: signing failed: Bad passphrase
gpg: signing failed: Bad passphrase
[gpgcron | info ]: Warning, invalid passphrase or no passphrase is cached in gpg-agent
[gpgcron | input]: Enter passphrase to cache into gpg-agent:

বৈধ পাসফ্রেজ প্রবেশ করা হলে নমুনা আউটপুট:

[gpgcron | input]: Enter passphrase to cache into gpg-agent:
[gpgcron | info ]: gpg-preset-passphrase return code: [0]
[gpgcron | info ]: A passphrase has been set and cached in gpg-agent
[gpgcron | info ]: Paraphrase set return code: [0]
[gpgcron | info ]: Validating passphrase cached in gpg-agent ...
[gpgcron | info ]: OK, valid passphrase has been cached in gpg-agent

যখন বৈধ পাসফ্রেজ ক্যাশে করা হয়, পরের বার আপনি এই স্ক্রিপ্টটি চালান, এটি আপনাকে পাসফ্রেজ প্রবেশ করতে বলবে না। সুতরাং এই লিপিটি আপনার প্রশ্নের সমাধান দেয়; "কেবলমাত্র আমি সঠিক পাসফ্রেজ ব্যবহার করছি তা নিশ্চিত করুন"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.