টিটিওয়াইকে ওভাররাইড না করে কীভাবে পাসওয়ার্ডটি su / sudo / ssh এ পাস করবেন?


148

আমি একটি সি শেল প্রোগ্রাম যা কাজ করা হবে লিখছি suবা sudoবা ssh। তারা সকলেই স্টিডিন বা কমান্ড লাইনের পরিবর্তে কনসোল ইনপুট (টিটিওয়াই) এ তাদের পাসওয়ার্ড চায়।

কেউ কি সমাধান জানেন?

পাসওয়ার্ড কম সেট আপ করা sudoকোনও বিকল্প নয়।

বিকল্প হতে পারে তবে এটি আমার স্ট্রিপড ডাউন সিস্টেমে উপস্থিত নেই।



উত্তর:


215

সুডোর জন্য স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ড গ্রহণের জন্য একটি -S বিকল্প রয়েছে। ম্যান এন্ট্রি এখানে:

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

এটি আপনাকে যেমন একটি কমান্ড চালানোর অনুমতি দেবে:

echo myPassword | sudo -S ls /tmp

Ssh হিসাবে, আমি কোনও সাফল্য ছাড়াই এর ব্যবহার স্বয়ংক্রিয় / স্ক্রিপ্ট করার জন্য অনেক চেষ্টা করেছি। অনুরোধ না করে কমান্ডে পাসওয়ার্ড দেওয়ার কোনও বিল্ট-ইন উপায় বলে মনে হচ্ছে না। যেমনটি অন্যরা উল্লেখ করেছেন, " প্রত্যাশা " ইউটিলিটি দেখে মনে হচ্ছে এটি এই দ্বিধাটি সমাধানের লক্ষ্যে করা হয়েছে তবে শেষ পর্যন্ত সঠিক ব্যক্তিগত-কী অনুমোদনের ব্যবস্থাটি হ'ল এটি স্বয়ংক্রিয় করার চেষ্টা করার সময় সঠিক উপায়।


2
ভাগ্যক্রমে, রুবির একটি অন্তর্নির্মিত এসএসএইচ ক্লায়েন্ট রয়েছে যা আপনাকে পাসওয়ার্ড নির্দিষ্ট করতে দেয়। আপনি রুবি -e "চেষ্টা করতে পারেন 'নেট / এসএসএস'; নেট :: এসএসএইচ.স্টার্ট ('উদাহরণ.কম', 'টেস্ট_উজার',: পাসওয়ার্ড => 'সিক্রেট') করুন | এসএসএস | 'সফলভাবে লগ ইন করেছেন'; cmd কমান্ড = পায় যখন; রাখে ssh.exec (cmd কমান্ড); শেষ শেষ "
user1158559

13
আমি এখানে একটি পার্টি pooper হিসাবে ঘৃণা করি, কিন্তু এটি করলে আপনার পাসওয়ার্ডটি প্রক্রিয়া তালিকায় প্রদর্শিত হতে পারে। আমি আরও ভাল উপায় নির্ধারণ করার চেষ্টা করছিলাম এবং এই নিবন্ধটি জুড়ে এসেছি এবং অবাক হয়েছিলাম যে কেউ এটিকে নির্দেশ করেননি। দুর্দান্ত সমাধান, তবে ঝুঁকিগুলি থেকে সাবধান থাকুন।
ম্যাট 21

Ssh সম্পর্কে, আপনি কি সংযোগের স্ট্রিংয়ে পাসওয়ার্ড দেওয়ার চেষ্টা করেছেন? পছন্দ nonroot:yourpassword@hostname.com? অবশ্যই আপনি কী প্রমাণীকরণ এবং কী পরিচালক ব্যবহার করেন তবে জিনিসগুলি অনেক সহজ।
কিল্লাহ

12
পাসওয়ার্ড প্রক্রিয়া তালিকায় প্রদর্শিত হওয়া বা ফাইলগুলিতে একটি ফাইল রেখে এবং বিড়াল ব্যবহার করে এড়িয়ে চলুন; 'cat pw | sudo -S <command>, এবং পরে rm pw
সিএবি

আর একটি উপায় হ'ল নেটকেট ব্যবহার করা এবং একটি সকেটের মাধ্যমে পাসওয়ার্ড সরবরাহ করা - nc -l 12345 | sudo -S <command>। প্রেরণ পক্ষের; echo myPassord | nc <target> 12345। এটি কেবল পাসওয়ার্ড পরিচালনার সমস্যাটিকে সরিয়ে দেয় তবে সম্ভবত একটি মাস্টার কনসোলের দিকে যেতে পারে যেখানে আপনার আরও বিকল্প রয়েছে।
সিএবি

36

আমি কিছু অ্যাপলস্ক্রিপ্ট লিখেছিলাম যা একটি ডায়ালগ বক্সের মাধ্যমে পাসওয়ার্ডের জন্য অনুরোধ জানায় এবং তারপরে একটি কাস্টম বাশ কমান্ড তৈরি করে:

echo <password> | sudo -S <command>

আমি নিশ্চিত না এটি সাহায্য করে কিনা।

সুডো একটি প্রাক-এনক্রিপ্ট হওয়া পাসওয়ার্ড গ্রহণ করলে এটি ভাল হবে, তাই আমি এটিকে আমার স্ক্রিপ্টের মধ্যে এনক্রিপ্ট করতে পারি এবং চারপাশের স্পষ্ট পাঠ্যের পাসওয়ার্ড প্রতিধ্বনিত করার বিষয়ে চিন্তা করি না। তবে এটি আমার এবং আমার পরিস্থিতির জন্য কাজ করে।


27

জন্য sshআপনি ব্যবহার করতে পারেন sshpass: sshpass -p yourpassphrase ssh user@host

আপনাকে কেবল প্রথমে এসএসপাস ডাউনলোড করতে হবে :)

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

12

আমি পেয়েছি:

ssh user@host bash -c "echo mypass | sudo -S mycommand"

আমার জন্য কাজ কর.


আমার পক্ষে কাজ করেনি। এখনও ssh পাসওয়ার্ডের জন্য অনুরোধ জানায়।
একেএস

দুর্দান্ত, অবশেষে এমন কিছু যা আমি ব্যবহার করতে পারি! ধন্যবাদ। আমি এটি ব্যাশ স্ক্রিপ্টের মধ্যে ব্যবহার করি যা একটি ssh সেশন শুরু করে এবং ক্লায়েন্টকে sudo কমান্ড দেয়। আমার স্ক্রিপ্টটির সমাধানের রেখা রয়েছে: ssh -t ব্যবহারকারীর নাম @ হোস্টনাম বাশ -c "সুডো ইকো ফার্টজয়াইস"
জেমস টি স্নেল


10

এই সমস্যার স্বাভাবিক সমাধান হ'ল একটি অ্যাপ্লিকেশন সেট করা যা সুপারুসার অ্যাক্সেসের জন্য প্রয়োজনীয় কার্য সম্পাদন করে: http://en.wikedia.org/wiki/Setuid

সুডো মানে অফলাইন ব্যবহার করা উচিত নয়।

পরবর্তী সম্পাদনা: এসএসএইচটি ব্যক্তিগত-সার্বজনীন কী প্রমাণীকরণের সাথে ব্যবহার করা যেতে পারে। যদি ব্যক্তিগত কীটিতে পাসফ্রেজ না থাকে তবে ssh কোনও পাসওয়ার্ডের জন্য অনুরোধ না করে ব্যবহার করা যেতে পারে।


10

আপনি যে সংস্থাগুলিতে সংযুক্ত হবেন সেগুলিতে সর্বজনীন / ব্যক্তিগত কী সেট আপ করে এটি করা যেতে পারে। প্রথম পদক্ষেপটি হ'ল স্থানীয় হোস্টে স্ক্রিপ্ট চালানো ব্যবহারকারীর জন্য একটি ssh কী উত্পন্ন করে চালিয়ে যাবেন:

ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y

তারপরে একটি ফাঁকা পাসওয়ার্ড লিখুন। এর পরে, আপনার এসএস কীটি টার্গেট হোস্টে অনুলিপি করুন যা আপনি সংযুক্ত হবেন।

ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>

Ssh কীগুলি নিবন্ধভুক্ত করার পরে, ssh remote_user@other_hostআপনি স্থানীয় হোস্ট থেকে একটি নীরব সঞ্চালন করতে সক্ষম হবেন ।


7

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

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

এই কমান্ডটি স্বয়ংক্রিয়ভাবে পাসওয়ার্ড দেয়।


দেখতে দেখতে দুর্দান্ত লাগছে, তবে রুট অনুমতি ছাড়াই আমি কীভাবে কোনও মাসচিনে প্রত্যাশা কমান্ড সক্ষম করতে পারি?
Radon8472

1
@ রেডোন 72৪72২ যদি আপনার কাছে এটি ইনস্টল করার অনুমতি না থাকে তবে এক্সিকিউটেবলকে ~ / বিনে যুক্ত করা যেতে পারে। যদি আপনার সিস্টেমটি আপনার পাঠ্যে স্বয়ংক্রিয়ভাবে ~ / বিন যোগ না করে, আপনি এক্সপোর্ট PATH = "$ PATH: ~ / bin" দিয়ে ম্যানুয়ালি এটি করতে পারেন বা স্বয়ংক্রিয়ভাবে এটি করতে আপনার প্রোফাইলটিতে সেই আদেশটি যুক্ত করতে পারেন। আপনি যদি নিজের PATH পরিবর্তন করতে না চান, আপনি তার পরিবর্তে কমান্ডটি এর পরম পথটি ব্যবহার করে চালাতে পারেন
mod

6

যখন এর চেয়ে ভাল বিকল্প আর নেই (যেমন অন্যদের পরামর্শ অনুসারে), তখন ম্যান সাক্ট সহায়তা করতে পারে:

   (sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
   socat - EXEC:'ssh -l user server',pty,setsid,ctty

          EXEC’utes an ssh session to server. Uses a pty for communication
          between socat and ssh, makes it ssh’s  controlling  tty  (ctty),
          and makes this pty the owner of a new process group (setsid), so
          ssh accepts the password from socat.

পিটিআই, সেটসাইড, সিটিটি জটিলতা সবই প্রয়োজনীয় এবং আপনার যতক্ষণ না ঘুমের প্রয়োজন হতে পারে, আপনার ঘুমের প্রয়োজন হবে। প্রতিধ্বনি = 0 বিকল্পটি দেখতেও মূল্যবান, যেমনটি ssh-র কমান্ড লাইনে রিমোট কমান্ডটি প্রেরণ করছে।


1
এটি আসলে suপাশাপাশি কাজ করবে । suএকটি -S (stdin) বিকল্প নেই।
আউশ

এর পরিবর্তে কী ঘুমানো এড়াতে এবং আরও নির্ভরযোগ্য কিছু ব্যবহার করা সম্ভব?
মাইকেল পানকভ

6

expectলিনাক্স ইউটিলিটি একবার দেখুন ।

এটি আপনাকে স্টিডিনের সাথে সাধারণ প্যাটার্নের মিলের ভিত্তিতে স্টডিওতে আউটপুট প্রেরণ করতে দেয়।


1

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


1
ssh -t -t me@myserver.io << EOF
echo SOMEPASSWORD | sudo -S do something
sudo do something else
exit
EOF

আপনি যদি ssh কী দিয়ে ব্যবহারকারী হিসাবে লগইন করতে পারেন তবে সুডোর অ্যাক্সেস ঠিক আছে: ssh -t ব্যবহারকারী @ হোস্ট "ইকো মাইপ্যাসওয়ার্ড | সুডো-এস সুডোকমন্ড"
জ্যাক

0

আমারও একই সমস্যা ছিল। রিমোট পিসিতে ডিরেক্টরি তৈরির জন্য ডায়ালগ স্ক্রিপ্ট। ssh সহ সংলাপ সহজ is আমি sshpass (পূর্বে ইনস্টল) ব্যবহার করি।

   dialog --inputbox "Enter IP" 8 78 2> /tmp/ip

   IP=$(cat /tmp/ip)


   dialog --inputbox "Please enter username" 8 78 2> /tmp/user

   US=$(cat /tmp/user)


   dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass

   PASSWORD = $(cat /tmp/pass)


   sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER


   rm /tmp/ip

   rm /tmp/user

   rm /tmp/pass

জার্মানি থেকে শুভেচ্ছা

তিতাস


0

@ জাহিদের উত্তরের ভিত্তিতে এটি আমার পক্ষে ম্যাকওএস 10.13 এ কাজ করেছে:

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers

0

একটি ভাল sshpassবিকল্প হ'ল:passh https://github.com/clarkwang/passh

রিমোট সার্ভারে লগইন করুন

 $ passh -p password ssh user@host

রিমোট সার্ভারে একটি কমান্ড চালান

 $ passh -p password ssh user@host date

পাসওয়ার্ডটি পাস করার জন্য অন্যান্য পদ্ধতি

-p পাসওয়ার্ড (ডিফল্ট: `পাসওয়ার্ড ')

-p env: env var থেকে পাসওয়ার্ড পড়ুন

-p ফাইল: ফাইল থেকে পাসওয়ার্ড পড়ুন

এখানে আমি ব্যাখ্যা করেছি যে এটি এসএসপাস এবং অন্যান্য সমাধানগুলির চেয়ে কেন ভাল।


-1
echo <password> | su -c <command> <user> 

এটি কাজ করছে।


1
ফেডোরায় আমার পক্ষে এটিই একমাত্র কাজ। লোকেরা কেবল উত্তর দেয় কারণ তারা তাদের পরিস্থিতিতে কাজ করে না?
হ্যাংচেন ইউ

2
"su: অবশ্যই একটি টার্মিনাল থেকে চালানো উচিত" (RPi1B, রাস্পিয়ান)
notme1560

দুর্ভাগ্যক্রমে এটি এর সাম্প্রতিক সংস্করণগুলিতে হয় না su, যা পরিবর্তে stdio থেকে পাসওয়ার্ড পড়ে reads
moutonjr

-1

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


-1

একটি উপায় হ'ল পঠন-অপশন ব্যবহার করা .. এভাবে পাসওয়ার্ডের অক্ষরগুলি পর্দায় ফিরে আসে না। আমি কিছু ব্যবহারের ক্ষেত্রে একটি ছোট স্ক্রিপ্ট লিখেছিলাম এবং আপনি এটি আমার ব্লগে দেখতে পারেন: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/


-1

ব্যবহার:

echo password | sudo command

উদাহরণ:

echo password | sudo apt-get update; whoami

আশা করি এটা সাহায্য করবে..


-2

স্ক্রিপ্ট আশা করার জন্য আপনি প্যারামিটার হিসাবে পাসওয়ার্ড সরবরাহ করতে পারেন।


-11
su -c "Command" < "Password"

আশা করি এটি সহায়ক হবে।


1
এটা না। "su: অবশ্যই টার্মিনাল থেকে চালানো উচিত" এর উত্তর।
thelogix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.