এলিসপ: সংক্ষেপে তথ্য কোনও ইন ডি ফাইল থেকে কীভাবে বাদ দেওয়া যায়? (যেমন লগইন শংসাপত্রসমূহ)


11

আমি আমার init স্ক্রিপ্টে লগ ইন ফাংশনটি সংজ্ঞায়িত করতে চাই, তবে আমি আমার লগইন শংসাপত্রগুলিকে হার্ডকোড করতে চাই না। আমি মনে করি যে কোনও স্থানীয় ফাইল থেকে আমার লগইন শংসাপত্রগুলিতে আমার init স্ক্রিপ্টটি পড়া এবং এই মানগুলিকে ভেরিয়েবল হিসাবে সংরক্ষণ করা ভাল কাজ work এইভাবে, আমি আমার গিট ইনডেক্স থেকে ফাইলটি বাদ দিতে পারি, যা আমার লগইন শংসাপত্রগুলিকে সুরক্ষিত রাখে।

এই পদ্ধতির বিষয়ে কোনও পরামর্শ, বা কোনও ফাইলে সংজ্ঞায়িত কোনও মানকে যুক্তি নির্ধারণের উপায় রয়েছে কি?

উদাহরণস্বরূপ, আমি আমার মধ্যে নিম্নলিখিতটি ব্যবহার করতে চাই init.el:

;; Set up our login variables here:
(setq file-location "~/.emacs.d/.login")
(setq erc-username "default-name")
(setq erc-password "default-password")
(setq erc-url "default-url")
(setq erc-port "default-port")
(defun read-lines (filePath)
  "Return a list of lines of a file at filePath."
  (with-temp-buffer
    (insert-file-contents filePath)
    (split-string (buffer-string) "\n" t)))
(if (file-exists-p file-location)
    (progn (setq login-credentials (read-lines file-location))
           (setq erc-username (nth 0 login-credentials))
           (setq erc-password (nth 1 login-credentials))
           (setq erc-url (nth 2 login-credentials))
           (setq erc-port (nth 3 login-credentials)))
    (message "No ERC login credentials provided. Please add login credentials as '<username>\n<password>\n<url>\n<port>' in ~/.emacs.d/.login to activate ERC mode."))

;; These message the values from my file correctly.
;; Everything up to this point works as expected
(message erc-username) 
(message erc-password)
(message erc-url)
(message erc-port)

;; Use our login variables here 
;; This doesn't work because the 'quote' function prevents evaluation of my variables, and a 'backquote' did not resolve it either
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(markdown-command "/usr/bin/pandoc")
 '(tls-program (quote ("openssl s_client -connect %h:%p -no_ssl2 -ign_eof -CAfile ~/.ssl/spi_ca.pem -cert ~/.ssl/znc.pem")))
 '(znc-servers (quote ((,erc-url ,erc-port t ((irc\.freenode\.net ,erc-username ,erc-password)))))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

নোট করুন যে আমার উদাহরণটি এখানেznc.el মডিউলটি ব্যবহার করে । আমি গিয়ে Emacs configs ফলে স্বতঃজেনারেট কোড পরিবর্তন করছি এবং ।M-x customize-group RET znc RETM-x customize-variable RET tls-program RET

উপরের কোডটি সহ আমার সমস্যাটি হল ভেরিয়েবলগুলি আমার custom-set-variablesফাংশনের উপরে লোড হচ্ছে না । কোনও ফাইল থেকে যথাযথ মানগুলি লোড করা ঠিকঠাক বলে মনে হচ্ছে, তবে আমি এগুলি যুক্তি হিসাবে ব্যবহার করতে পারি না। আমি বিশ্বাস করি এটি quoteফাংশনের সাথে সম্পর্কিত , যা এর বিষয়বস্তুগুলির মূল্যায়ন রোধ করে। আমি ,মূল্যায়নের জোর করার জন্য একটি 'ব্যাককোট' ( ) চেষ্টা করেছি , তবে এটিও কার্যকর হয় না। এই বাগটি ঠিক করতে বা অন্য কোনও পদ্ধতির প্রস্তাব দেওয়ার জন্য কোনও পরামর্শ খুব সহায়ক হবে।

উত্তর:


11

ইমাকস নিয়ে আসে auth-source.el। আমি এটির নিজস্ব সংস্করণটি রোল করার চেষ্টা করব না।

auth-sourceএটি থেকে পড়া সহজ করে তোলে ~/.authinfo.gpg। ভাল প্রোগ্রাম ইতিমধ্যে সমর্থন করবে authinfo। একটি দ্রুত অনুসন্ধান ইআরসি ব্যবহার করতে পারেauthinfo যে পরামর্শ দেয় ।

শেল্ফ মেলপা প্রোগ্রামগুলি এলোমেলোভাবে বন্ধ করার জন্য আপনি সহজেই ~/.authinfo.gpgএই জাতীয় পাসওয়ার্ড পুনরুদ্ধার করতে authinfo ব্যবহার করতে পারেন

(with-eval-after-load 'random-mode
  (require 'auth-source)
  (let ((auth (nth 0 (auth-source-search :host "secrets.com"
                                         :requires '(user secret)))))
    (setq random-psk (funcall (plist-get auth :secret))
          random-user (plist-get auth :user))))

~/.authinfo.gpgনিম্নলিখিত লাইনটি কোথায় রয়েছে:

## Used by random-mode.el
machine secrets.com login rasmus password my-secret-password

অবশ্যই সুরক্ষা বোধ একটি মিথ্যা। আপনার পাসওয়ার্ড এখন ভেরিয়েবলের সরলরেখায় সংরক্ষণ করা হয়েছে:

random-psk => "my-secret-password"

তবে কমপক্ষে এটি কোনও গিট-রেপো বা ড্রপবক্সে নেই!

যদি আপনি কোনও ধরণের কীরিং পেয়ে থাকেন তবে আপনি সেখান থেকে সিক্রেট সার্ভিস এপিআই ব্যবহার করে শংসাপত্র পেতে সক্ষম হবেন (দেখুন (info "(auth) Secret Service API"))।


6

custom-set-variablesঅদ্ভুত - আমি 100% নিশ্চিত নই যে এটি এরকম কেসগুলি পরিচালনা করতে পারে। আপনি চেষ্টা করতে পারেন (eval `(custom-set-variables … (erc-password … ,(special-value) …) …), কিন্তু এটি আমাকে একটি নোংরা হ্যাক-চারপাশে আঘাত করে।

gpgএক্সটেনশন সহ একটি ফাইলের অতিরিক্ত তথ্য রাখুন, এটি সংরক্ষণ করুন, একটি পাসওয়ার্ড দিন এবং তারপরে ফাইলটি লোড করুন। ফাইলটি লোড করার সময় আপনাকে পাসওয়ার্ড রাখতে হবে।

উদাহরণস্বরূপ, sensitive.el.gpgসামগ্রীগুলি সহ একটি ফাইল তৈরি করুন :

(message "Hello, there!")

ফাইলটি সংরক্ষণ করুন, টিপুন (বা এতে ট্যাব করুন) [OK]এবং আপনার পাসওয়ার্ড দিন। চিন্তা করবেন না - এটি সংরক্ষণের আগে এটি নিশ্চিতকরণের জন্য জিজ্ঞাসা করবে। তারপরে, আপনার init ফাইলটিতে দিন give

(load "sensitive.el.gpg")

এটি প্রারম্ভকালে ফাইলটি লোড করবে, আপনাকে আপনার পাসওয়ার্ড প্রবেশ করানো দরকার যাতে ইমাস্যাক্স ফাইলটি ডিক্রিপ্ট করতে পারে।

আপনি যদি প্রারম্ভকালে আপনার পাসওয়ার্ডটি প্রবেশ করতে না চান তবে আমি ফাংশনটিকে ম্যানুয়ালি চালানোর জন্য একটি নাম দেব:

(defun my:keys () (interactive) (load "sensitive.el.gpg"))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.