ব্যবহারকারীর নাম এবং পাসওয়ার্ড সহ সিআরএল ব্যবহার করছেন?


465

আমি একটি ইউআরএল অ্যাক্সেস করতে চাই যার ব্যবহারকারীর নাম / পাসওয়ার্ড প্রয়োজন। আমি এটি কার্ল দিয়ে অ্যাক্সেস করার চেষ্টা করতে চাই। এই মুহুর্তে আমি এমন কিছু করছি:

curl http://api.somesite.com/test/blah?something=123

আমি একটি ত্রুটি পেয়েছি। আমার ধারণা উপরের কমান্ডের সাথে আমার একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড নির্দিষ্ট করা দরকার।

আমি এটা কিভাবে করবো?

উত্তর:


691

-uব্যবহারকারীর নাম অন্তর্ভুক্ত করতে পতাকাটি ব্যবহার করুন এবং কার্ল একটি পাসওয়ার্ডের জন্য অনুরোধ করবে:

curl -u username http://example.com

আপনি কমান্ডে পাসওয়ার্ডটি অন্তর্ভুক্ত করতে পারেন তবে আপনার পাসওয়ার্ড বাশ ইতিহাসে দৃশ্যমান হবে:

curl -u username:password http://example.com

109
মনে রাখবেন যে আপনি কনসোল থেকে এটি করলে পাসওয়ার্ডটি ইতিহাসে থাকবে যা ভুল ... আপনার জাস্ট-ইউ ব্যবহারকারী নির্দিষ্ট করা উচিত এবং সিআরএল আপনাকে নো-ইকো মোডে পাসওয়ার্ড চাইবে।
ক্রিশ্চিয়ান ভ্রাবি

25
@ ক্রিশ্চিয়ানভ্রাবি প্রযুক্তিগতভাবে সঠিক, তবে ভুল যদি আপনি এটি একটি স্বয়ংক্রিয় স্ক্রিপ্ট থেকে চালাচ্ছেন যা প্রম্পটগুলিকে অনুমতি দেয় না। এই সমস্যার সমাধান সম্পর্কে কৌতূহলী হবে।
লাইগামার

26
@ ওমর ওথম্যান আপনি যদি কোনও স্ক্রিপ্ট থেকে কার্ল চালাচ্ছেন তবে শংসাপত্রগুলি (স্পষ্টতই) আপনার ইতিহাসে শেষ হবে না, তবে সেগুলি পিএস (1) এ দৃশ্যমান হবে। ঠিক করুন:print -- '-u username:password' > somewhere && curl -K somewhere http://...
কেবলমাত্র কেউ

7
@ জা পরিবেশ এনভায়রনমেন্ট ভেরিয়েবলগুলি কমান্ড কার্যকর করার আগে মূল্যায়ন করা হবে। পাসওয়ার্ড পিএস আউটপুটে এখনও দৃশ্যমান হবে।
রবার্ট ভান

8
বিন্দুটি বেলবার নয় তবে আমি বিশ্বাস করি আমার উত্তর ( স্ট্যাকওভারফ্লো.com / a / 27894407 / 758174 অর্থাত্ ব্যবহার করা --netrc-file) আরও সুরক্ষিত। এটি পাসওয়ার্ডটিকে ইতিহাস, পিএস, আপনার স্ক্রিপ্ট ইত্যাদির বাইরে রাখে my এটি আমার সমস্ত স্ক্রিপ্টগুলিতে এবং সমস্ত প্রমাণীকরণের ব্যবহারের জন্য আমি একমাত্র ফর্মটি ব্যবহার করি curl
পিয়েরে ডি

251

এটি করা নিরাপদ:

curl --netrc-file my-password-file http://example.com

... কমান্ড লাইনে একটি সরল ব্যবহারকারী / পাসওয়ার্ড স্ট্রিং পাস করার জন্য, এটি একটি খারাপ ধারণা।

পাসওয়ার্ড ফাইলের ফর্ম্যাটটি (অনুসারে man curl):

machine <example.com> login <username> password <password>

বিঃদ্রঃ:

  1. মেশিন নাম আবশ্যক না অন্তর্ভুক্ত https://বা অনুরূপ! শুধু হোস্টের নাম।
  2. ' machine', ' login' এবং ' password' শব্দগুলি কেবল কীওয়ার্ড; আসল তথ্য হ'ল এই কীওয়ার্ডগুলির পরে স্টাফ।

10
হ্যাঁ, এটি প্রক্রিয়া তালিকা এবং কমান্ডের ইতিহাসের বাইরে পাসওয়ার্ড রাখে। এটি করার চেয়ে ভাল উপায়, এবং আরও কিছুটা কাজ :)
এসি কেপহার্ট

8
এটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত; কমান্ড-লাইনের পাসওয়ার্ডগুলি একটি ভয়ঙ্কর অনুশীলন are (এবং এটি একটি বহুল পরিচিত সত্য))
এলিওটিটিসিবিবল

6
আপনি পতাকাটি ব্যবহার করতে পারেন -K <file>বা --config <file>ফাইল বা স্ট্যান্ডার্ড ইনপুটের মাধ্যমে কার্ল পতাকাগুলি পেতে পারেন। (সতর্কতা: এর সাথে বিভ্রান্ত হবেন না -kবা --insecure!)
রাফলউইন্ড

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

5
@ স্টিভেনথএজিলিআমগ্রাহী আমি দ্বিমত পোষণ করছি, .netrcযথাযথ কঠোর অনুমতি নিয়ে ক্লিয়ারটেক্সট ফাইল ব্যবহার করা আরও অনেক ভাল , সুতরাং কেবলমাত্র আপনার ব্যবহারকারী এটি অন্য যন্ত্রে (যেমন কমান্ড লাইন আর্গগুলি) পড়তে পারে যা অন্যান্য ব্যবহারকারীদের তথ্য পড়তে দেয়।
কেন উইলিয়ামস

76

বা একই জিনিস কিন্তু বিভিন্ন বাক্য গঠন

curl http://username:password@api.somesite.com/test/blah?something=123

1
আমি সেই বাক্য গঠনটি ব্যবহার করি, কারণ আরও অনেক পরিস্থিতিতে ব্যবহার করা যেতে পারে। কোনও উইন্ডোজ সেন্টিমিডির মতো কোনও সিআরএল এবং কোনও ডাব্লুগেট না ব্যবহার করে start "" "http://username:password@api.somesite.com/test/blah?something=123"। এটি যে কোনও জায়গা থেকে চালু করা যেতে পারে। এটি এফটিপি
লগিনগুলিতেও

8
মজার চরিত্রগুলি ব্যবহার করার জন্য আপনাকে ইউআরএল নাম এবং পাসওয়ার্ড এনকোড করা দরকার
ডায়াডেলিক

2
আমি জানি যে বেশিরভাগ লোকই ইউএসএল-তে পাসওয়ার্ড (বা এমনকি ব্যবহারকারীর নাম) না পাঠাতে জানেন যেমন এটি শুকানো সহজ। যে বলেন; আমি এটির প্রস্তাবনা দিচ্ছি না তবে আপনি যখন যা করছেন তা আপনি কেবল তখনই ব্যবহার করবেন।
লসমনোস

1
এটি স্যুইউউপার প্রত্নতাত্ত্বিক এবং এটি ব্যবহার করা উচিত নয় । এটি এফটিপি এর দিনগুলি থেকে: ও
কিউস - মোনিকা

2
দুর্ভাগ্যক্রমে, এটি প্রক্রিয়া তালিকায় পাসওয়ার্ডটি দৃশ্যমান ছেড়ে দেয়।
মার্ক রিবাউ

63

আপনি কেবল লিখে লিখে ব্যবহারকারীর নাম পাঠাতে পারেন:

curl -u USERNAME http://server.example

এর পরে কার্ল আপনাকে পাসওয়ার্ড জিজ্ঞাসা করবে, এবং পাসওয়ার্ডটি স্ক্রিনে দৃশ্যমান হবে না (বা যদি আপনাকে কমান্ডটি অনুলিপি / আটকানোর প্রয়োজন হয়)।


27

কোনও স্ক্রিপ্টে পাসওয়ার্ডটি সুরক্ষিতভাবে পাস করার জন্য (যেমন পিএস অক্সফ বা লগগুলি প্রদর্শন করা থেকে বিরত রাখতে) আপনি এটি কে-ফ্ল্যাগ (স্টাডিনের কনফিগারেশন পড়ুন) এবং একটি হেরডোক দিয়ে করতে পারেন:

curl --url url -K- <<< "--user user:password"

2
--configবিকল্পটির রেফারেন্সের জন্য ধন্যবাদ (-কে) ... সম্ভবত "- ব্যবহারকারীর ব্যবহারকারী: পাসওয়ার্ড" একটি ফাইলে রাখা আরও সহজ সমাধান হতে পারে -K the fileযাতে আপনার কাছে প্রতিটি স্ক্রিপ্টে পাসওয়ার্ডের কেবল একটি অনুলিপি থাকে । একটি একক ফাইল সুরক্ষিত করা অনেক সহজ।
ক্রিস কগডন

1
একই বিকল্প, যেখানে শুধুমাত্র পাসওয়ার্ড ফাইল রয়েছে: cat "${password_filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-। আমাকে -K-পুরানো ম্যাকোস ব্যাশ, ওয়াইএমএমভি-এর url- এর আগে রাখতে হয়েছিল।
মার্ক রিবাউ

12

সাধারণত সিআরএল কমান্ড হিসাবে উল্লেখ করা হয়

curl https://example.com\?param\=ParamValue -u USERNAME:PASSWORD

আপনার যদি কোনও পাসওয়ার্ড না থাকে বা পাসওয়ার্ডের জন্য কমান্ড প্রম্পটটি ছেড়ে দিতে চাইলে পাসওয়ার্ডের বিভাগটি ফাঁকা ছেড়ে যান।

অর্থাত curl https://example.com\?param\=ParamValue -u USERNAME:


1
দ্রষ্টব্য: পাসওয়ার্ড শেল ইতিহাস এবং প্রক্রিয়া তালিকায় দৃশ্যমান হবে।
মার্ক রিবাউ

10
curl -X GET -u username:password  {{ http://www.example.com/filename.txt }} -O

1
দ্রষ্টব্য: পাসওয়ার্ড শেল ইতিহাস এবং প্রক্রিয়া তালিকায় দৃশ্যমান হবে।
মার্ক রিবাউ

8

পাসওয়ার্ডটি আপনার মধ্যে অন্তত পপ আপ না করতে .bash_history:

curl -u user:$(cat .password-file) http://example-domain.tld

6
এই ক্ষেত্রে, পাসওয়ার্ডটি প্রক্রিয়া তালিকার মধ্যে এখনও শেষ হবে, উদাহরণস্বরূপ এটি ps auxw |grep curlসঠিক সময়ে কারো দ্বারা করা দৃশ্যমান । একইভাবে, পাসওয়ার্ডটি যদি চালানো হয় তবে লগ করা হবেsudo
অ্যাডাম কাটজ

1
এই পদ্ধতির সাহায্যে পাসওয়ার্ডটি একটি ফাইলে (.password-file) উপস্থিত থাকে যা .ব্যাশ ইতিহাসের চেয়ে বেশি সুরক্ষিত হতে পারে। এ সম্পর্কে ভাল অংশটি হ'ল এটি কেবল পাসওয়ার্ড - URL এবং ব্যবহারকারীর নামটি .password-ফাইলটিতে ফাঁস হয় না।
স্টিভেন দ্য ইজিলি মজেড

7

বেশ সহজ, নীচে করুন:

curl -X GET/POST/PUT <URL> -u username:password

প্রশ্নটিতে সুরক্ষার প্রয়োজন নেই
ভিক্টর পোলো ডি গাইভস মন্টেরো

1
দ্রষ্টব্য: পাসওয়ার্ড শেল ইতিহাস এবং প্রক্রিয়া তালিকায় দৃশ্যমান হবে
মার্ক রিবাউ

6

অন্যান্য উত্তরগুলি নেটর্কে ইউজারনেম এবং পাসওয়ার্ড নির্দিষ্ট করার পরামর্শ দিয়েছে যা আমি পড়েছি তার উপর ভিত্তি করে আমি সম্মত। এখানে কিছু বাক্য গঠন বিশদ রয়েছে:

https://ec.haxx.se/usingcurl-netrc.html

অন্যান্য উত্তরের মতো, আমি এই প্রশ্নটি সম্পর্কে সুরক্ষায় মনোযোগ দেওয়ার প্রয়োজনের উপর জোর দিতে চাই।

যদিও আমি বিশেষজ্ঞ নই, আমি এই লিঙ্কগুলিকে অন্তর্দৃষ্টিপূর্ণ পেয়েছি:

https://ec.haxx.se/cmdline-passwords.html

সংক্ষেপ:

ব্যবহার প্রোটোকলের এনক্রিপ্ট সংস্করণ করে (HTTPS HTTP- র বনাম) (FTPS বনাম এফটিপি) সাহায্য করতে পারেন এড়ানোর নেটওয়ার্ক ফুটো।

নেট সিআরসি ব্যবহার করে কমান্ড লাইন ফাঁস এড়াতে সহায়তা করতে পারে।

আরও এক ধাপ এগিয়ে যাওয়ার জন্য, আপনি জিপিজি ব্যবহার করে নেটআরসিআর ফাইলগুলি এনক্রিপ্ট করতে পারবেন বলে মনে হয়

https://brandur.org/fragments/gpg-curl

এটির সাথে আপনার শংসাপত্রগুলি সরল পাঠ হিসাবে "বিশ্রামে" (সঞ্চিত) নয়।


5

আপনার শংসাপত্রগুলি সংরক্ষণ / পুনরুদ্ধার করতে প্লেইন এবং সর্বাধিক সুরক্ষিত উপায় হ'ল পরিবেশ ভেরিয়েবলগুলি ব্যবহার করা। এইভাবে একটি কার্ল কমান্ড:

curl -Lk -XGET -u "${API_USER}:${API_HASH}" -b cookies.txt -c cookies.txt -- "http://api.somesite.com/test/blah?something=123"

তারপরে আপনার বিশ্রামের এপিটি কল করে এবং WWW_Authenticationবেস 64 এর এনকোডড মানগুলি API_USERএবং এর সাথে http শিরোনামটি পাস করবে API_HASH। কেবল -Lkপোস্টটি 30x পুনঃনির্দেশগুলি অনুসরণ করতে এবং অনিরাপদ tls হ্যান্ডলিং (যেমন এসএসএল ত্রুটি উপেক্ষা করুন) ব্যবহার করতে কার্লকে বলে tells যখন --ডাবলটি কমান্ড লাইন পতাকাগুলি প্রক্রিয়াকরণ বন্ধ করতে কেবল বাক্স সিনট্যাক্স চিনির সাথে রয়েছে। তদ্ব্যতীত, -b cookies.txtএবং -c cookies.txtপতাকাগুলি কুকিগুলি -bপ্রেরণ এবং -cস্থানীয়ভাবে কুকিজ সংরক্ষণ করে handle

ম্যানুয়ালটিতে প্রমাণীকরণ পদ্ধতির আরও উদাহরণ রয়েছে


1
মনে রাখবেন যে "-Lk" ব্যবহার আপনাকে ম্যান-ইন-দ্য মিডল (এমআইটিএম) আক্রমণ উন্মুক্ত করতে পারে, সুতরাং সেই বিকল্পটি সম্পর্কে সতর্কতা অবলম্বন করুন।
গাইপ্যাডক

4
এটি কাজ করে না ... যেহেতু বাশ আপনার জন্য সেই পরিবর্তনগুলি প্রসারিত করে, প্রসারণ প্রক্রিয়া তালিকায় উপস্থিত হয়।
ক্রিস কগডন

4

আপনি কমান্ড যেমন ব্যবহার করতে পারেন,

curl -u user-name -p http://www.example.com/path-to-file/file-name.ext > new-file-name.ext

তারপরে এইচটিটিপি পাসওয়ার্ড ট্রিগার করা হবে।

তথ্যসূত্র: http://www.asept.com/article/how-use-curl-http-password- সুরক্ষিত- সাইট


লিঙ্কটি নষ্ট হয়ে গেছে।
জেসন এস

4

কার্লের শংসাপত্রগুলি পাস করার নিরাপদতম উপায়টি inোকানোর জন্য অনুরোধ জানানো হবে। পূর্ববর্তী পরামর্শ হিসাবে ব্যবহারকারীর নাম পাস করার সময় এটি ঘটে -u USERNAME

তবে আপনি যদি সেইভাবে ব্যবহারকারীর নামটি পাস করতে না পারেন? উদাহরণস্বরূপ ব্যবহারকারীর নামটি ইউআরএল এর অংশ হতে পারে এবং কেবল পাসওয়ার্ডটি জসন পেডলোডের অংশ হতে পারে।

tl; dr: এই ক্ষেত্রে নিরাপদে কার্লটি কীভাবে ব্যবহার করবেন:

read -p "Username: " U; read -sp "Password: " P; curl --request POST -d "{\"password\":\"${P}\"}" https://example.com/login/${U}; unset P U

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

অন্যান্য সমাধানগুলি কেন আদর্শ নয় সে সম্পর্কে আমি বিস্তারিত জানাব।

পরিবেশের ভেরিয়েবলগুলি অনিরাপদ কেন

  1. পরিবেশের পরিবর্তনশীল সামগ্রীর অ্যাক্সেস এবং এক্সপোজার মোড, ট্র্যাক করা যায় না (পরিবেশগতভাবে) কোনও প্রক্রিয়াতে পরিবেশ স্পষ্টভাবে উপলব্ধ
  2. প্রায়শই অ্যাপগুলি পুরো পরিবেশটি দখল করে এবং এটি ডিবাগিং বা পর্যবেক্ষণের উদ্দেশ্যে লগ করে (কখনও কখনও ডিস্কে লগ ফাইলের সরলরেখায়, বিশেষত কোনও অ্যাপ ক্রাশ হওয়ার পরে)
  3. পরিবেশের ভেরিয়েবলগুলি শিশু প্রক্রিয়াগুলিতে চলে যায় (অতএব ন্যূনতম সুযোগ-সুবিধার নীতিটি ভঙ্গ করা)
  4. এগুলি বজায় রাখা একটি সমস্যা: নতুন ইঞ্জিনিয়াররা জানেন না যে তারা সেখানে আছেন, এবং তাদের চারপাশের প্রয়োজনীয়তা সম্পর্কে সচেতন নন - উদাহরণস্বরূপ, তাদের সাব-প্রসেসগুলিতে পাস না করা - যেহেতু তারা প্রয়োগ করা বা নথিভুক্ত নয়।

কমান্ড লাইনে সরাসরি এটি কোনও কমান্ডে টাইপ করা কেন অনিরাপদ কারণ আপনার গোপনীয়তাটি ps -auxবর্তমানে চলমান যে কোনও প্রক্রিয়ার জন্য জমা দেওয়া কমান্ডকে তালিকাভুক্ত করার কারণে অন্য যে কোনও চলমান ব্যবহারকারী দ্বারা দৃশ্যমান হবে তা শেষ হয় । এছাড়াও আপনার সেক্রেট বাশ ইতিহাসে শেষ হয় (একবার শেলটি শেষ হয়ে গেলে)।

স্থানীয় দৃশ্যে এটিকে অন্তর্ভুক্ত করা কেন অনিরাপদ কারণ এই দৃশ্যে ঝুঁকি হ্রাস করতে পারে ফাইলের উপর কঠোর পসিক্স অ্যাক্সেস সীমাবদ্ধতা। তবে এটি এখনও আপনার ফাইল সিস্টেমে একটি ফাইল, বিশ্রামে এনক্রিপ্ট করা নেই।


2
মনে হচ্ছে এই পদ্ধতিটি এখনও প্রক্রিয়া তালিকায় পাসওয়ার্ডটি প্রদর্শন করবে?
মার্ক রিবাউ

4

আমার একই ধরণের দরকার ছিল (উবুন্টু 16.04 এলটিএস) এবং উত্তরগুলিতে প্রদত্ত আদেশগুলি আমার ক্ষেত্রে কাজ করতে ব্যর্থ হয়েছিল। আমাকে ব্যবহার করতে হয়েছিল:

curl -X POST -F 'username="$USER"' -F 'password="$PASS"' "http://api.somesite.com/test/blah?something=123"

-Fআর্গুমেন্টে ডাবল উদ্ধৃতিগুলি কেবল তখনই প্রয়োজন হয় যদি আপনি ভেরিয়েবল ব্যবহার করছেন, সুতরাং কমান্ড লাইন থেকে ... -F 'username=myuser' ...ভাল হবে।

প্রাসঙ্গিক সুরক্ষা বিজ্ঞপ্তি: মিঃ মার্ক রিবাউ মন্তব্যগুলিতে যেমন মন্তব্য করেছেন এই কমান্ডটি প্রসেসলিস্টে পাসওয়ার্ড (A পাস ভেরিয়েবল, প্রসারিত) দেখায়!


1
দেখে মনে হচ্ছে এটি এখনও প্রক্রিয়া তালিকায় A পাসের মান দেখায়?
মার্ক রিবাউ

হ্যাঁ, দুর্ভাগ্যক্রমে এটি হয়।
মার্কো

1

আপনি যদি এমন কোনও সিস্টেমে থাকেন যেখানে জিনোম কেরিং অ্যাপ রয়েছে এমন কোনও সমাধান যা সরাসরি পাসওয়ার্ড প্রকাশ করা এড়িয়ে চলে ids উন্মোচনের বিষয়টি এড়ায় তা হ'ল কিরিং থেকে পাসওয়ার্ড বের gkeyring.py :

server=server.example.com
file=path/to/my/file
user=my_user_name
pass=$(gkeyring.py -k login -tnetwork -p user=$user,server=$server -1)

curl -u $user:$pass ftps://$server/$file -O

1
দ্রষ্টব্য: প্রক্রিয়া তালিকায় পাসওয়ার্ড দৃশ্যমান হবে। (এবং ইতিহাস যদি এটি কোনও স্ক্রিপ্টের অংশ না হয়))
মার্ক রিবাউ

1

এটি ওপি যা চেয়েছিল তার চেয়ে অনেক বেশি, তবে যেহেতু সুরক্ষিতভাবে পাসওয়ার্ডগুলিতে পাস করার জন্য এটি শীর্ষ ফলাফল curl , আমি এই সমাধানগুলি এখানে অন্যদের জন্য যুক্ত করছি যারা এটি অনুসন্ধান করে আগত।


দ্রষ্টব্য: কমান্ডের -sজন্য আর্গ পোজিক্স readনয়, এবং এটি সর্বত্র পাওয়া যায় না, সুতরাং এটি নীচে ব্যবহার করা হবে না। আমরা ব্যবহার করবে stty -echoএবং stty echoপরিবর্তে।

দ্রষ্টব্য: নীচে সমস্ত ব্যাশ ভেরিয়েবলগুলি সেট না করে বরং কোনও ফাংশনে থাকলে স্থানীয় হিসাবে ঘোষণা করা যেতে পারে।

দ্রষ্টব্য: perlআমি যে সমস্ত সিস্টেমে চেষ্টা করেছি সেগুলিতে এটি বেশিরভাগ ক্ষেত্রে উপলভ্য যা এটি অনেক কিছুর উপর নির্ভরশীলতার কারণে হয়েছে, যেখানে আছে rubyএবং pythonনেই তাই perlএখানে ব্যবহার করছি। আপনি যদি গ্যারান্টি দিতে পারেন ruby/ pythonআপনি কোথায় করছেন তবে আপনি perlকমান্ডটি তাদের সমতুল্য দিয়ে প্রতিস্থাপন করতে পারেন ।

দ্রষ্টব্য: bashম্যাকোস 10.14.4 এ 3.2.57 এ পরীক্ষিত । অন্যান্য শেল / ইনস্টলগুলির জন্য কিছু ছোট অনুবাদ প্রয়োজন হতে পারে।


নিরাপদে কোনও ব্যবহারকারীকে কার্ল (পাসওয়ার্ড) পাসওয়ার্ডের জন্য অনুরোধ করুন। বিশেষত দরকারী যদি আপনার একাধিকবার কার্ল কল করতে হয়।

আধুনিক শেলগুলির জন্য, যেখানে echoএকটি অন্তর্নির্মিত (এর মাধ্যমে চেক করুন which echo):

url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
read pass
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input
echo ${pass} | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
unset username
unset pass

পুরানো শেলগুলির জন্য, যেখানে এর echoমতো কিছু রয়েছে /bin/echo(যেখানে এটি যা কিছু থাকে প্রক্রিয়া তালিকায় দেখা যায়):
এই সংস্করণটি পাসওয়ার্ডটি ব্যবহার করতে পারে না , তার পরিবর্তে নীচে দেখুন see

url='https://example.com'
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
perl -e '
    my $val=<STDIN>;
    chomp $val;
    print STDERR "\n";  # we need to move the line ahead, but not send a newline down the pipe
    print $val;
' | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
stty echo   # re-enable echoing user input
unset username



যদি আপনাকে কোনও ফাইলটিতে অস্থায়ীভাবে পাসওয়ার্ড সংরক্ষণ করতে হয়, এটি পরিষ্কার করার আগে একাধিক কমান্ডের জন্য এটি পুনরায় ব্যবহার করার জন্য (কারণ আপনি কোডটি পুনরায় ব্যবহারের জন্য ফাংশন ব্যবহার করছেন এবং কোড পুনরাবৃত্তি করতে চান না এবং করতে পারবেন না) প্রতিধ্বনি মাধ্যমে প্রায় মান পাস)। (হ্যাঁ, এই ফর্মটি বিভিন্ন লাইব্রেরিতে ফাংশন না করে এই ফর্মটি দেখতে কিছুটা স্বার্থপর; এগুলি দেখানোর জন্য প্রয়োজনীয় ন্যূনতম কোডে আমি তাদের হ্রাস করার চেষ্টা করেছি))

প্রতিধ্বনি অন্তর্নির্মিত হলে (এটি বিশেষত স্বীকৃত, যেহেতু প্রতিধ্বনি একটি অন্তর্নির্মিত তবে সম্পূর্ণতার জন্য সরবরাহ করা হয়):

url='https://example.com'
filepath="$(mktemp)"  # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
read pass
echo "${pass}" > "${filepath}"
unset pass
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input

cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-

rm "${filepath}"  # don't forget to delete the file when done!!
unset username

প্রতিধ্বনি যখন এর মতো কিছু হয় /bin/echo:

url='https://example.com'
filepath="$(mktemp)"  # random path, only readable by current user
printf "Username: "
read username
printf "Password: "
stty -echo  # disables echoing user input, POSIX equivalent for 'read -s'
$(perl -e '
    my $val=<STDIN>;
    chomp $val;
    open(my $fh, ">", $ARGV[0]) or die "Could not open file \"$ARGV[0]\" $\!";
    print $fh $val;
    close $fh;
' "$filepath")
printf "\n" # we need to move the line ahead
stty echo   # re-enable echoing user input

cat "${filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-

rm "${filepath}"  # don't forget to delete the file when done!!
unset username
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.