আমি কীভাবে ওএস এক্স কীচেইন থেকে পাসওয়ার্ড ব্যবহার করে এসএসএস-এ লগইন করতে পারি?


9

আমাকে কোনও এসএস সার্ভারে লগইন করতে হবে যা কী ভিত্তিক প্রমাণীকরণ সমর্থন করে না। এবং আমি প্রতিবার পাসওয়ার্ড টাইপ করতে চাই না।

আমি ওএস এক্স সিংহটি ব্যবহার করছি (10.7.2)। আমি ওএস এক্স কীচেইনে পাসওয়ার্ডগুলি যুক্ত করেছি [1]। এখন আমি কীচেইন ব্যবহার করে স্বয়ংক্রিয়ভাবে পাসওয়ার্ডটি পুনরুদ্ধার করতে পারি /usr/bin/security, তবে এসএসএস প্রম্পটে এই পাসওয়ার্ডটি প্রেরণের কোনও উপায় খুঁজে পাচ্ছি না।

আমিও চেষ্টা করেছি sshpass। তবে আমি যখন এটি চালানোর চেষ্টা করি তখন নিম্নলিখিত ত্রুটিটি সহ ssh প্রস্থান করে:

ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (publickey,password).

প্রতিবার পাসওয়ার্ড প্রবেশ না করেই কি এই সার্ভারটিতে লগইন করতে পারি?

মন্তব্য

  1. আমি কীচেইনে যে স্কিমটি ব্যবহার করি তা এর মতো দেখায়
    • দয়া করে: ইন্টারনেট পাসওয়ার্ড
    • অ্যাকাউন্ট ব্যবহারকারীর নাম
    • যেখানে: ssh: // সার্ভার-নাম

উত্তর:


11

অ ইন্টারেক্টিভ এসএসএইচ সেশন

যদি আপনার রিমোট সার্ভারে একটি ইন্টারেক্টিভ সেশনের প্রয়োজন না হয় তবে sshআপনি কোনও পরিবেশ ছাড়াই চালাতে পারেন tty, যেমন অটোমেটারে রান শেল স্ক্রিপ্ট ক্রিয়াকলাপের অংশ হিসাবে ।

আপনাকে এমন একটি প্রোগ্রাম তৈরি করতে হবে যা বলা হয়ে গেলে পাসওয়ার্ডটিকে স্ট্যান্ডার্ড আউট প্রিন্ট করে, যেমন: নিম্নলিখিত ব্যাশ স্ক্রিপ্টটি ব্যবহার করে আপনাকে এক্সিকিউটেবল করার প্রয়োজন chmod +x pwd.sh:

#!/usr/bin/env bash
echo "password"

তারপরে, SSH_ASKPASSএই প্রোগ্রামটির পথে পরিবেশের পরিবর্তনশীল সেট করুন এবং তারপরে sshঅটোমেটার ক্রিয়ায় এটি চালান :

export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls

যখন কোনও নেই tty, SSH_ASKPASSএবং এবং DISPLAY(এক্স 11 এর জন্য, ডিফল্ট দ্বারা সেট করা) সেট করা থাকে, এসএসএইচ দ্বারা নির্ধারিত প্রোগ্রামটি কার্যকর করে SSH_ASKPASSএবং তার আউটপুটটিকে পাসওয়ার্ড হিসাবে ব্যবহার করে। এটি গ্রাফিকাল পরিবেশে ব্যবহারের উদ্দেশ্যে, যাতে একটি উইন্ডো আপনার পাসওয়ার্ডের জন্য জিজ্ঞাসা করতে পপ আপ করতে পারে। এই ক্ষেত্রে, আমরা কেবল আমাদের প্রোগ্রাম থেকে পাসওয়ার্ডটি ফিরিয়ে দিয়ে উইন্ডোটি এড়িয়ে গেছি। পরিবর্তে আপনি securityআপনার কীচেন থেকে পড়তে ব্যবহার করতে পারেন :

#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2

ls( sshকমান্ড লাইনে) হ'ল sshলগ ইন করার পরে কার্যকর করা কমান্ড এবং এর আউটপুট অটোমেটারে মুদ্রিত হয়। আপনি, অবশ্যই, আপনার শুরু হওয়া প্রোগ্রামটির আউটপুট লগ করার জন্য এটি কোনও ফাইলে পুনর্নির্দেশ করতে পারেন।


ইন্টারেক্টিভ এসএসএইচ সেশনগুলি ব্যবহার করে sshpass

আমি ডাউনলোড, সংকলন এবং ইনস্টল করেছি sshpassএবং এটি পুরোপুরি কার্যকর হয়েছে। আমি যা করেছি তা এখানে:

  1. অ্যাপল বিকাশকারী সরঞ্জামগুলি পান
  2. ডাউনলোড করুন এবং খুলুন sshpass-1.05.tar.gz
  3. ডিরেক্টরিতে একটি শেল খুলুন sshpass-1.05
  4. চালান ./configure
  5. চালান make
  6. চালান make install(আপনার sudoএটির প্রয়োজন হতে পারে )

এখন প্রোগ্রামটি ইনস্টল করা আছে /usr/local/bin/sshpass। নিম্নলিখিতগুলির মতো একটি লাইন ব্যবহার করে কার্যকর করুন:

sshpass -pYourPassword ssh username@hostname

আপনি securityএটি করার আগে থেকেই পাসওয়ার্ডটি পড়তে পারেন এবং এটি ব্যবহার করুন:

SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname

এটি একটি শেল ফাংশনে আবদ্ধ করুন এবং আপনি ঠিক যেমন ssh-yourhostnameসংযোগ করতে টাইপ করতে পারেন , এটি পাসওয়ার্ড পুনরুদ্ধার করে এবং স্বয়ংক্রিয়ভাবে পাসওয়ার্ড প্রবেশ করিয়ে।


হাই, আমি আপনার উত্তরটিকে আপত্তি জানাই যেহেতু এটি আমাকে সমাধানের দিকে নিয়ে গেছে। তবে কি তুমিই এখানে বর্ণিত ঠিক কাজ (SSH এর সিংহের সংস্করণে এই নির্দিষ্ট হতে পারে) 1) নন-ইন্টারেক্টিভ সেশন জন্য নয় কি, SSH এখনও একটি পাসওয়ার্ড আমাকে জিজ্ঞেস করলেন, এবং পরে আমি এটা প্রবেশ আমি পেয়েছিলাম STDIN is not a terminal। 2) সাথে ইন্টারেক্টিভ সেশনগুলির জন্য sshpass, -pবিকল্পটি দৃশ্যত কিছু করে না। তবে নির্ধারিত sshpassসময়ে দৌড়ানো SSH_ASKPASSকি কাজ করে!
চৈতন্য গুপ্ত

পছন্দ করুন এটি সিংহের অটোমেটরের মধ্যে থেকে অ-ইন্টারেক্টিভভাবে আমার জন্য কাজ করেছে। দ্বিতীয় ইস্যুটি সম্পর্কে, আমার পক্ষে এই মুহূর্তে একটি নোংরা শেল সেশন ছিল, আমি আর নিশ্চিত নই। আপনাকে +1 এবং সাইটটিতে আপনার সমাধান যুক্ত করার জন্য ধন্যবাদ।
ড্যানিয়েল বেক

আমার খারাপ (1 সম্পর্কিত) - আমি অটোমেটার না হয়ে টার্মিনালে অ-ইন্টারেক্টিভ সেশনটি চালানোর চেষ্টা করছিলাম। আমি এখন এটি অটোমেটারে চেষ্টা করেছি এবং আমি এখনও STDIN is not a terminalত্রুটি পেয়েছি । তবে, এবার আমাকে কোনও পাসওয়ার্ডের জন্য অনুরোধ করা হয়নি; আমি বিশ্বাস করি SSH_ASKPASSযে অটোমেটারে কাজ করা হচ্ছে যেহেতু, আমি যদি SSH_ASKPASSভুল পাসওয়ার্ডের বিনিময়ে ফাইলটি তৈরি করি তবে আমি একটি Permission denied, please try again.ত্রুটি পাই ।
চৈতন্য গুপ্ত

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

@ ড্যানিয়েলব্যাকের কোনও আইডিয়া কীভাবে এটি কাজ করতে হয়macOs >= 10.13
এনবাড়ি

7

আমি একটি সমাধান পেয়েছি (এর জন্য প্রয়োজনীয় মূল তথ্য সরবরাহ করার জন্য ড্যানিয়েল বেককে ধন্যবাদ)। মনে রাখবেন যে আমি এটি কেবল ওএস এক্স লায়ন 10.7.2 দিয়ে পরীক্ষা করেছি। যদি এটি আপনার পক্ষে কাজ করে না, ড্যানিয়েলের সমাধান চেষ্টা করুন।

প্রথমে আমাদের SSH_ASKPASSপরিবেশের পরিবর্তনশীল সেট করতে হবে - এর মানটি এমন কোনও প্রোগ্রামের পথ হওয়া উচিত যা স্ট্যান্ডার্ড আউটপুটে পাসওয়ার্ড মুদ্রণ করে। কীচেইন থেকে পাসওয়ার্ড পেতে, এটি দেখতে এটির মতো হওয়া দরকার (আমি এটি কল করি get-ssh-password.sh):

#!/bin/bash

/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2

কয়েকটি বিষয় লক্ষ্য করুন:

  1. এটি ধরে নিয়েছে যে আমি প্রশ্নের মধ্যে যেভাবে বর্ণনা করেছি তাতে আপনি কীচেইনে পাসওয়ার্ডটি সংরক্ষণ করেছেন

  2. প্রদত্ত প্রোগ্রামটি SSH_ASKPASSকোনও যুক্তি ছাড়াই ডাকা হবে; সুতরাং আমরা ব্যবহারকারী এবং এটিতে হোস্টনাম পাস করার জন্য পরিবেশ পরিবর্তনশীল ব্যবহার করি।

এখন আমরা সেট করে SSH_PASSWORD_USERএবং আমাদের সার্ভারে লগইন করতে SSH_PASSWORD_HOSTNAMEচালাতে পারি sshpass

এটি করার জন্য আমি অন্য লিপি তৈরি করেছি ssh-kcpass:

#!/bin/bash

export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "$1" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "$1" | cut -d@ -f2)

sshpass ssh "$1"

কোনও পাসওয়ার্ড টাইপ না করে ssh সার্ভারে লগইন করতে আপনার কেবল চালানো দরকার ssh-kcpass user@hostname


কীভাবে এটি কাজ করবেনmacOS >= 10.13
nbari

-3

হাই, লোকেরা আমি এই বিষয়টি জুড়ে এসে অন্য কিছু জিনিস খুঁজছিলাম তবে ... আমি জানি না যে আমি এখানে কিছু অনুপস্থিত রয়েছি ... তবে আপনার দৃষ্টিভঙ্গি আমার কাছে অদ্ভুত বলে মনে হচ্ছে। কেন কেবল পাবলিক কী প্রমাণীকরণ ব্যবহার করবেন না ... একটি আরএসএ কী তৈরি করুন sh ssh-keygen -t rsa -b 2048 -C 'ইমেল / আইডি'

আদর্শভাবে আপনি একবার ssh-copy-id ব্যবহারকারী @ হোস্ট ব্যবহার করতে পারেন এবং অন্য সার্ভারে কীটি ইনস্টল করতে একবার পাসওয়ার্ড দিয়ে প্রমাণীকরণ করতে বা kind / .ssh / अधिकृत_keys- এ কীটি স্থাপন করতে কোনও ধরণের স্ক্রিপ্ট বা লেখক সরঞ্জাম ব্যবহার করতে চান অন্য হোস্ট (আপনি যে ব্যবহারকারীটিতে লগইন করতে চান তার জন্য) কমান্ডটি যদি ম্যানুয়ালি করা হয়ে থাকে তবে আপনাকে সেই অনুযায়ী / etc / ssh / sshd_config সম্পাদনা করতে হবে এবং ডাব্লু অটোমেশন (শেফ, জবাবদিহি) করতে হবে, আপনি কাঙ্ক্ষিত অবস্থার জন্য পুরো কনডিগাকে ঠেলাবেন।

বিতরণে গুরুত্বপূর্ণ কীটি হল id_rsa.pub, প্রাইভেট কীটি সুরক্ষিত রাখুন

আপনার মেশিনে automatic / .ssh / কনফিগারেশন এবং স্বয়ংক্রিয়ভাবে সোজা সোজা ফ্যাশন সম্পাদনায় হোস্টগুলিকে অনুমোদনের জন্য কীচেইন ব্যবহার করতে:

হোস্ট * UseKeychain হ্যাঁ

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


1
প্রশ্ন-সংস্থার প্রথম বাক্যটি পড়ুন: '' আমাকে একটি এসএসএস সার্ভারে লগইন করতে হবে যা কী ভিত্তিক প্রমাণীকরণ সমর্থন করে না। ''
স্কট

হাই স্কট আমি মনে করি আপনি সেই অংশটিও মিস করেছেন যেখানে তিনি বলেছেন যে তিনি প্রতিবার পাসওয়ার্ড টাইপ করতে চান না, যার অর্থ তিনি এটি করছেন।
রিকার্ডো মেন্ডেস

না, আমি এটি মিস করিনি। আপনি বিশ্বাস করবেন কেন আমি করেছি?
স্কট

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