দূরবর্তী মেশিনে রুট অনুমতি সহ rsync চালান


28

আমি একটি রিমোট মেশিনে একটি ফোল্ডার দিয়ে আমার মেশিন থেকে একটি ফোল্ডার সিঙ্ক করতে চান। দূরবর্তী ফোল্ডার দ্বারা শুধুমাত্র ম্যানিপুলেশন করা যেতে পারে root। আমি ব্যবহার করতে পারেন রিমোট মেশিনে একটি অ্যাকাউন্ট আছে sudo। আমি কিভাবে rsync চালাতে পারি যাতে এটি দূরবর্তী মেশিনে রুট অনুমতি দেয়?

আমি নিম্নলিখিত চেষ্টা করেছি:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="sudo rsync"

কিন্তু (আমার পাসওয়ার্ড প্রবেশ করার পরে) আমি নিম্নলিখিত ত্রুটি পেতে পারি:

sudo: no tty present and no askpass program specified

আপনি রিমোট ফোল্ডারে অনুমতিগুলি পরিবর্তন করতে পারবেন না যাতে আপনার ব্যবহারকারীর কাছে এটি অ্যাক্সেস অ্যাক্সেস থাকে?
Phil

1
দুর্ভাগ্যবশত যে একটি বিকল্প নয়।
Peter

ইউনিক্স SE এ একই প্রশ্নের উত্তরটি যাচাই করা আরও ভাল unix.stackexchange.com/questions/92123/...
ndemou

উত্তর:


11

এই সমাধান আমি সঙ্গে এসেছিলেন:

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete

একটি মিশন বিট!


9
আমি আশা করি আপনার পাসওয়ার্ডটি কমান্ড লাইনে দৃশ্যমান হবে। এটি rsync চলমান সময়কাল জন্য দৃশ্যমান হওয়া উচিত।
BillThor

1
পাসওয়ার্ড কোথায় দৃশ্যমান? শুধু কমান্ড লাইনের স্থানীয় বাক্সে? অথবা এই পদ্ধতির খুব দূরবর্তী দুর্বলতা তৈরি করে? আমি উপরে উত্তর এবং এই সমাধান ব্যবহার ramifications বুঝতে চেষ্টা করছি। আমি এখানে একটি প্রশ্ন জিজ্ঞেস করলাম: superuser.com/questions/398146/...
MountainX

@ মাউন্টেনএক্স এটি প্রক্রিয়াগুলির তালিকাতে দৃশ্যমান হবে (উদাঃ। ps aux )। টেস্ট: rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example, তারপর দূরবর্তী মেশিন এবং টার্মিনাল খুলুন ps aux | grep findfind / শুধুমাত্র বৃহৎ মৃত্যুদন্ড সময়কাল সঙ্গে আমার মন এসেছিলেন যে প্রথম জিনিস হিসাবে ব্যবহার করা হয়।
Ivan Vučica

@ ইভানভুচিকা ভাল ব্যাখ্যা করার জন্য ধন্যবাদ
MountainX

1
আমি জানি এটি পুরানো তবে, আপনি যদি কমান্ডের পাসওয়ার্ডটি এড়াতে চান তবে আপনি ssh এর জন্য কী ব্যবহার করতে পারেন এবং দূরবর্তী মেশিনে আপনার ব্যবহারকারীকে SOPOERS ফাইলটিতে NOPASSWD দিয়ে যুক্ত করুন: সমস্ত পতাকা। নিচের লিংকে সর্বোচ্চ র্যাঙ্ক উত্তর দেখুন। দ্রষ্টব্য: এটি গ্রহণযোগ্য উত্তর নয়: askubuntu.com/questions/147241/execute-sudo-without-password
Dave

10

এই ব্লগে সমাধান আমার জন্য সত্যিই ভাল কাজ করেছে: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/

মূলত:

stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo  
rsync -avze ssh --rsync-path='sudo rsync' myUser@REMOTE_SERVER:/REMOTE_PATH/ LOCAL_PATH 

প্রথম লাইন পর্দায় পাসওয়ার্ড প্রদর্শন না করে ইন্টারেক্টিভ পাসওয়ার্ড এন্ট্রির জন্য অনুমতি দেয়। উবুন্টু 9.04 এ আমার জন্য দুর্দান্ত কাজ করে।


1
এটি tty_tickets বিকল্পটি অনির্বাচিত করার প্রয়োজন: !tty_tickets
blueyed

2
কেমন ssh -t [other options] পরিবর্তে সঙ্গে খেলার stty -echo?
Ivan Vučica

আমি আমার ক্ষেত্রে আমি আগে থেকেই সেট করা আছে: tty_tickets যাইহোক ... তাই আমি এই পদ্ধতির চেষ্টা করতে পারেন।
MountainX

1
sudo: no tty present and no askpass program specified
Michael

কিভাবে tty_tickets আনসেট করবেন? কোন মেশিনে? এই rsync কমান্ড সময়?
Jonathan

9

এই সমাধান চেষ্টা করুন। আপনার sudoers ফাইল ( /etc/sudoers ) এই মত আপনার ব্যবহারকারী সেটআপ:

username ALL= NOPASSWD:/usr/bin/rsync

দ্য NOPASSWD:/usr/bin/rsync বলে sudo যে যখন আপনার ব্যবহারকারী রান /usr/bin/rsync অথবা শুধুই rsync যে কোন পাসওয়ার্ড প্রয়োজন হয়।

তারপর আপনার মূল --rsync-path="sudo rsync" কাজ করা উচিত.


আমি rsync সম্পন্ন পরে ... ব্যবহারকারীর নাম সব সেটিং ছাড়া sudo rsync বিকল্প ব্যবহার। দূরবর্তী যখন আমি সিডি বা ls চেষ্টা করুন। আমি অনুমতি অস্বীকার। যদিও আমি রুট। আমি ls যাও sudo আছে। কিন্তু সিডি ক্ষেত্রে এটি এমনকি সম্ভব নয়। আমি সব ডিরেক্টরি এবং ফাইল চাউন চেষ্টা। এখনও কাজ করে নি। কারও কারও কারও কারও কারন ঠিক আছে?
Dreaded semicolon

1
আপনি কিভাবে sudoers ফাইল সম্পাদনা করতে বলা উচিত
Jonathan

দেখুন দয়া করে unix.stackexchange.com/a/92397/128237 এই সংশোধন নিরাপত্তা প্রভাব জন্য।
BrainStorm.exe

4

আপনি পাসওয়ার্ড সরবরাহ করার একটি পদ্ধতি প্রয়োজন sudo। একটি askpass স্বাভাবিক প্রক্রিয়া উপলব্ধ না হলে প্রোগ্রাম পাসওয়ার্ড জিজ্ঞাসা করার জন্য ডিজাইন করা হয়। ঠিককরা sudo চালানোর জন্য একটি পাসওয়ার্ড প্রয়োজন হবে না rsync আপনার ব্যবহারকারীদের একটি বিকল্প হিসাবে।

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

সম্পাদনা করুন: আমি আমার পোস্টের ক্লায়েন্ট বিভাগে তৈরি ব্যবহারকারীদের কী কী লগইনগুলির জন্য সেটআপ কীগুলিতে একটি স্ক্রিপ্ট অন্তর্ভুক্ত করেছি লিনাক্সে ব্যাকআপ পিসি সেট আপ করা হচ্ছে । Sshd_config এর জন্য ডকুমেন্টেশনটি দেখুন যা স্ক্রিপ্টে দেখানো হিসাবে কী ব্যবহার সীমিত করে আপনি কিছু করতে পারেন।


আপনার সাহায্যের জন্য ধন্যবাদ, কিন্তু আমি একটি সমাধান খুঁজে পেয়েছি যা আমার জন্য ভাল কাজ করে।
Peter

keybased লগইন সম্পর্কে কোন বিবরণ?
TheVillageIdiot

3

দূরবর্তী মেশিনে

sudo apt install ssh-askpass
which ssh-askpass

তারপর স্থানীয় মেশিনে

rsync -av -e 'ssh -X' --rsync-path='SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass sudo -A rsync' /some/local/path user@remote:/some/remote/path

রিমোট মেশিনে প্রকৃত পথের সাথে ssh-askpass বিকল্প বিকল্প

সূত্র: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/


1

আমি বিদ্যমান উত্তর জটিলতা দ্বারা বিস্মিত। এটা এ পর্যন্ত আপনার সিস্টেমে (আপনার পিসি এবং রিমোট হোস্ট) কনফিগার করার জন্য সহজ এবং সুবিধাজনক যাতে আপনি পাসওয়ার্ড ব্যবহার না করে রিমোট হোস্টে রুট হিসাবে সংযোগ করতে পারেন। এবং এটি চেহারা অসদৃশ এটা খুব নিরাপদ

  1. রিমোট হোস্টে / etc / ssh / sshd_config এই লাইনটি "PermitRootLogin ছাড়া পাসওয়ার্ড ছাড়াই" নিশ্চিত করুন (এটি ডিফল্টভাবে সেখানে রয়েছে এমন অনেক বিতরণে)। এটি রুটকে কোনো প্রমাণীকরণ পদ্ধতি ব্যবহার করে ssh শেল পেতে দেয় ছাড়া অনিরাপদ পাসওয়ার্ড প্রম্পট।
  2. (যদি আপনি ইতিমধ্যে জানেন না কিভাবে) কোনও অনুসরণ করুন অনেক টিউটোরিয়াল ssh মাধ্যমে পাসওয়ার্ডহীন লগইন কিভাবে প্রাপ্ত
  3. আপনি স্বাভাবিকভাবেই করবেন এবং কোন পাসওয়ার্ড ছাড়াই rsync ব্যবহার করুন।

যতক্ষণ পর্যন্ত দূরবর্তী হোস্টের /root/.ssh/authorized_keys লাইন হিসাবে এটি ভুলবেন না সে মেশিনটি আপনার পিসি থেকে রুট কমান্ড গ্রহণ করে।


0

এখানে আমার জন্য কাজ করা হয়েছে, বিবেচনা করে যে আমি পাসওয়ার্ড প্রমাণীকরণ রাখতে চাই (তাই আমি ব্যবহার করতে চাই না NOPASSWD বা কী) - উবুন্টু 14.04:

  • "খোল" sudo নিষ্ক্রিয় করে দূরবর্তী মেশিনে tty_tickets একটি অস্থায়ী ফাইল মাধ্যমে /etc/sudoers.d/ (যা ডেবিয়ানকে সমর্থিত হওয়া উচিত, দেখুন /etc/sudoers.d/README ), এবং "ব্যবহারকারীর ক্যাশেড প্রমাণপত্রাদি আপডেট করুন", যা "15 মিনিটের জন্য সুডো টাইমআউট প্রসারিত করে"
  • চালানো rsync সঙ্গে sudo হিসাবে অন্য উত্তর দেখানো
  • "বন্ধ করা" sudo অস্থায়ী ফাইল অপসারণ করে দূরবর্তী মেশিনে /etc/sudoers.d/, যা আবার সক্ষম tty_tickets

... বা কমান্ড লাইন সহ:

ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'

স্থানীয় মেশিনে এই কমান্ডগুলি চালানোর সময় আমি এই প্রতিক্রিয়াগুলি পেয়েছি:

$ ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
[sudo] password for remoteuser: 
Defaults !tty_tickets
Connection to $REMOTEPC closed.

$ rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
remoteuser@$REMOTEPC's password: 
sending incremental file list
client.conf
           1269 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

$ ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
removed ‘/etc/sudoers.d/temp’
[sudo] password for remoteuser: 
Connection to $REMOTEPC closed.

মনে রাখবেন যে sudo -v প্রতিটি সময় ফাইল পরে স্থাপিত হবে /etc/sudoers.d/, তাই সেখানে পরিবর্তন গৃহীত হয়।


0

রিমোট মেশিনে rsync আরম্ভ করে অন্য একটি পদ্ধতির অনুমতি সীমাবদ্ধতাগুলি পেতে হয়। পরিবর্তে:

rsync /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder

আপনি করতে পারেন:

ssh ubuntu@x.x.x.x 'rsync ubuntu@y.y.y.y:/home/ubuntu/my/lovely/folder /remote/lovely/folder'

কোথায় y.y.y.y আপনার স্থানীয় মেশিন এর আইপি ঠিকানা। এটি কেবল তখনই কাজ করে যদি আপনার স্থানীয় মেশিন একটি SSH সার্ভার হিসাবে কাজ করতে পারে।


1
হুম ... আপনি আপনার প্রথম কমান্ড লাইনে রিমোটে স্থানীয় অনুলিপি করছেন না - এবং তারপরে দ্বিতীয় কমান্ড লাইনে, যা প্রথমটির সমতুল্য হওয়া উচিত, দূরবর্তী থেকে স্থানীয়কে অনুলিপি করা হচ্ছে (যা প্রথমটির সমতুল্য নয়)?
sdaau

উপস! ঠিক কর.
Keith

0

আমার workuround যোগ করা হয় --rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"

উদাহরণ:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"

সাধারণত কমান্ড লাইন এক-মাছ ধরার মধ্যে পাসওয়ার্ড রাখা একটি ভাল ধারণা নয়; উদাহরণস্বরূপ, তারা প্রক্রিয়া গাছ দৃশ্যমান হয়ে ওঠে। আমি কখনও কখনও এই ধরনের বিবৃতিতে প্রকৃত পাসওয়ার্ড প্রতিস্থাপন করে $ (বিড়াল my_password.txt) যা সামান্য ভাল

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"


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