এক লাইনে সার্ভারের মধ্যে সুরক্ষিত ফাইলগুলি অনুলিপি করছেন?


13

আমি squid.confএকটি সার্ভার থেকে অন্য সার্ভারে অনুলিপি করতে চাই ।

  • সার্ভারগুলি একে অপরের সাথে কথা বলে না। আমি আমার ওয়ার্কস্টেশনটি দিয়ে যেতে চাই।
  • উভয় সার্ভারেরই ফাইল রয়েছে তাই এটি লক্ষ্যবস্তুতে ওভাররাইট করা হবে।
  • ফাইলগুলির 600অনুমতি রয়েছে এবং এটি রুটের মালিকানাধীন।
  • ssh এর মাধ্যমে রুট লগইন অক্ষম করা আছে ( PermitRootLogin no)।
  • আমি যদি এটি সম্ভব হয় তবে এক লাইনে এটি করতে চাই, কারণ এটি কোনও সেটআপ গাইডের অংশ হবে।

আমি করতে জানি

ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
    ssh target 'tar xzpf - -C /etc/squid/'

সার্ভারের মধ্যে ফাইল অনুলিপি এবং অনুমতি সংরক্ষণ করতে। তবে এই ক্ষেত্রে আমি "অনুমতি অস্বীকার" পাব।

আমি এটিও করতে পারি জানি:

ssh -t source 'sudo cat /etc/squid/squid.conf'

এই উপায়ে -tsudo ফাইলের বিষয়বস্তু আউটপুট দেওয়ার আগে অ্যাডমিন পাসওয়ার্ড জিজ্ঞাসা করতে দেয়।

সমস্যাটি হল, আমি জানি না যে কীভাবে এই কৌশলগুলিকে এমন কোনও কিছুর সাথে সংযুক্ত করতে হবে যা প্রতিটি সার্ভারে সুডো পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে, এবং ফাইলটিকে তার গন্তব্যে স্থানান্তর করবে। এটা কি সম্ভব?

আপডেট : আমি এখানে সেরা আসতে পারেন:

ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' && \
ssh source 'cat /tmp/squid.tgz' | \
    ssh target 'cat >/tmp/squid.tgz' && \
ssh -t source 'sudo rm /tmp/squid.tgz' && \
ssh -t target \
    'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'

এটিকে ওয়ান-লাইনার বলা একটি প্রসারিতের মতো মনে হয়। আমি মনে করি সেটআপ গাইডের আলাদা পদক্ষেপ নেওয়ার জন্য আমি এটি ভেঙে ফেলব।


উত্তর:


11

সুডোর সাথে চেইন এসএসএসের চেয়ে এসএসএস দিয়ে শেন চেন করা সহজ। সুতরাং ssh সার্ভার কনফিগারেশন পরিবর্তন করা ঠিক আছে, আমি প্রতিটি সার্ভারের মূলের জন্য ssh খোলার পরামর্শ দিচ্ছি, তবে কেবল লোকালহস্ট থেকে। আপনি এখানে একটি Matchধারা সহ এটি করতে পারেন sshd_config:

PermitRootLogin no
Match Host localhost
    PermitRootLogin yes

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

রুট হিসাবে কোনও সার্ভারের সাথে সংযোগ স্থাপনের জন্য, একটি উপাধি এর ~/.ssh/configমতো সংজ্ঞা দিন :

Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"

আপনি যদি ব্যবহারের জন্য জেদ করেন তবে sudoআমি বিশ্বাস করি যে আপনার একটি পৃথক কমান্ডের দরকার হবে, যেমন sudoএকটি টার্মিনাল থেকে পড়াতে জোর দেয় (যদিও এটিতে আপনার অ্যাকাউন্টের টিকিট রয়েছে) ¹, এবং কোনও ফাইল ফাইল অনুলিপি করার পদ্ধতি (scp, sftp, rsync) রিমোট টার্মিনালের সাথে ইন্টারঅ্যাক্ট করতে সহায়তা করে।

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

ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'

¹ আপনার না থাকলে তবে আপনি NOPASSWDএটি জিজ্ঞাসা করবেন না।


প্রথম সমাধানটি আমার পক্ষে ভাল কাজ করেছে তবে দ্বিতীয় লাইনটি হওয়া উচিত Match host localhost
cdd

4

আপনি sudoপাসওয়ার্ড না জিজ্ঞাসা পরবর্তী পদ্ধতিতে সেট আপ করতে পারেন :

উত্স উপর:

user    ALL=NOPASSWD:/bin/cat

লক্ষ্যে:

user    ALL=NOPASSWD:/usr/bin/tee

এবং আপনার মেশিনে করুন:

ssh source 'sudo cat /test' | ssh target 'sudo tee /test'

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

পুনশ্চ. যাইহোক, আপনি যদি sudoব্যবহারকারী থেকে পাসওয়ার্ড জিজ্ঞাসা করতে সেট আপ করেন তবে এর সাথে স্ট্রিংটি [sudo] password for userলক্ষ্যবস্তু ফাইলে উপস্থিত হবে ear


পুতুল পরামর্শ দেওয়ার জন্য +1, তবে আপনার সমাধানটি নিরাপত্তাহীন বলে মনে হচ্ছে। আমি পাশাপাশি রুট হিসাবে লগ ইন করতে পারবেন।
itadok

2

Ssh ব্যবহারের পরিবর্তে আপনি সার্ভারের মধ্যে ফাইল স্থানান্তর করতে scp ব্যবহার করতে পারেন।

লক্ষ্য সার্ভারে লগ ইন করুন:

আপনি যেখানে ফাইলটি অনুলিপি করতে চান সেখানে লক্ষ্য দিরে পরিবর্তন করুন।

#scp -r -p -P 22 root@source-ipaddress:/source-path-file-to-copy .

r - রিকার্সিভ পি - আসল ফাইল থেকে পরিবর্তনের সময়, অ্যাক্সেসের সময় এবং মোডগুলি সংরক্ষণ করে


এটি ধরে নেওয়া হয় যে আমি রুট হিসাবে লগইন করতে পারি, যা আমি পারি না। প্রশ্ন আপডেট করা হচ্ছে।
itadok

2

Ssh কনফিগারেশন পরিবর্তন না করে, আপনি সার্ভার 2 এর সাথে সংযোগের মাধ্যমে দুটি এসএসএস টানেল হোস্ট-> সার্ভার 1 এবং সার্ভার 2-> হোস্ট তৈরি করতে পারেন। হোস্ট মেশিনে (একই বন্দর) এই দুটি টানেল সংযুক্ত করুন। এবং সার্ভার 1 এ সংযুক্ত টানেলগুলি থেকে ডেটা পুনরুদ্ধার করতে এবং সার্ভার 2 এ সেভ করতে সার্ভার 2 এ সুডো চালান।

ssh -L60000:${source}:22 -R60000:localhost:60000 -t ${target} 'sudo bash -c "ssh -p 60000 '$(whoami)'@localhost \"cd /path/to/dir; tar -czf - files\"|tar -C/path/to/target -xzf -"'

ধারণাটি হ'ল: 1- 60000 বন্দরে আপনার মেশিন থেকে উত্স মেশিনে একটি স্থানীয় টানেল তৈরি করতে

ssh -L60000:${source}:22

1 বি- আপনার মেশিনে ফিরে যেতে একটি রিমোট টানেল তৈরি করুন

-R60000:localhost:60000

2- লক্ষ্য মেশিনে সংযোগ করুন

-t ${target}

3- লেখার জন্য টার্গেট মেশিনে রুট হিসাবে সমস্ত চালান

'sudo bash -c "..."'

4- টানেলের মাধ্যমে উত্স মেশিনে সংযোগ দিন। হোয়ামি এবং লোকালহোস্ট মানে $ {লক্ষ্য} মেশিনে লোকালহোস্ট।

ssh -p 60000 '$(whoami)'@localhost

5- রিমোট ফাইল (গুলি) প্যাকেজ করুন এবং এটি স্টপআউটে জিপ প্রেরণ করুন

cd /path/to/dir; tar -czf - file

6- স্টাডাউটের মাধ্যমে প্যাকেজটি গ্রহণ করুন এবং সেইসাথে / পাথ / টু / টার্গেট ডিরেক্টরিতে ফাইলগুলি এক্সট্রাক্ট করুন

|tar -C/path/to/target -xzf -

দ্রষ্টব্য: আপনি 3 টি পর্যন্ত স্ক্কি নিশ্চিতকরণ এবং 3 টি পাসওয়ার্ডের অনুরোধ পেতে পারেন। তবে ফাইলগুলি অনুলিপি করা হবে।

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