দুটি সংযোগযুক্ত সার্ভারের মধ্যে ফাইলগুলি বাউস করতে আরএসসিএন হ্যাক


8

সংযোগটি এখানে:

[Server1] <---> [my desktop] <---> [Server2]

সার্ভার 1 এবং সার্ভার 2 এ প্রত্যেকে অন্যের সাথে সরাসরি কথা বলার অনুমতি নেই (জিজ্ঞাসা করবেন না)। আমার ডেস্কটপ, তবে ssh এর মাধ্যমে উভয় সার্ভার অ্যাক্সেস করতে সক্ষম।

আমার সার্ভার 1 থেকে সার্ভার 2 এ ফাইলগুলি অনুলিপি করা দরকার।

আত্মত্যাগমূলকভাবে আমি এসএসএস + টার হ্যাক ব্যবহার করে যাচ্ছি:

ssh -q root@Server1 'tar -vzc /path/to/files ' | ssh -q root@Server2 'tar -vzx -C /'

এবং এটি দুর্দান্ত কাজ করে, তবে আমি এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে চাই এবং আমার ডেস্কটপের মাধ্যমে দুটি সার্ভারের মধ্যে আরএসসিএনসি কাজ করতে চাই।

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

  • আমার ডেস্কটপে সার্ভার 1 থেকে সার্ভার 2-তে ফাইলগুলি আরএসএনসি করার জন্য একটি লাইনার কমান্ড
  • সমস্ত ওয়ান কমান্ড লাইনে, একটি টার্মিনাল উইন্ডো
  • আমি চাই যে পোর্ট ফরোয়ার্ড টানেলটি কেবলমাত্র rsync কমান্ডের জীবনের জন্য বিদ্যমান।
  • আমি স্কেপ করতে চাই না, আমি আরএসএনসি চাই।

কারও কি এটা করার কৌশল আছে?

সম্পাদনা: এখানে ওয়ার্কিং কমান্ড! সবার দুর্দান্ত কাজ: ১. আরএসএ কী পথের জন্য, টিল্ডি ব্যবহার করতে পারে না, "/ রুট /" ব্যবহার করতে হয়েছিল। ২. এখানে চূড়ান্ত কমান্ডলাইন:

ssh -R 2200:SERVER2:22 root@SERVER1 "rsync -e 'ssh -p 2200 -i /root/.ssh/id_rsa_ROOT_ON_SERVER2' --stats --progress -vaz /path/to/big/files root@localhost:/destination/path"

পরিস্ফুটন ডিনামাইট যায়.


এটি সত্যিই দুর্দান্ত। হোস্ট কী যাচাইকরণ অক্ষম করা একটি জিনিস যা পরিবর্তন করা দরকার। TTYless প্রমাণীকরণের জন্য আপনার কাছে এসএসএইচ কী রয়েছে তবে সার্ভারগুলি কখনই একে অপরের সাথে কথা বলেনি তারা হোস্ট কীগুলি যাচাই করতে পারে না। এটি অক্ষম করার জন্য সর্বোত্তম: -ও স্ট্রাইকটহস্টকি চেকিং = -p বা -i পতাকাগুলির পরে নেই।
আমালা

উত্তর:


5

আপনি যদি ইন্টারমিডিয়েট মেশিনে ডেটার অনুলিপি রাখতে খুশি হন তবে আপনি কেবল একটি স্ক্রিপ্ট লিখতে পারেন যা সার্ভার 1 ব্যবহার করে স্থানীয় অনুলিপিটিকে রেফারেন্স হিসাবে আপডেট করে তারপরে সার্ভার 2 তে স্থানীয় কপিটি রেফারেন্স হিসাবে ব্যবহার করে আপডেট করেছে:

#!/bin/sh
rsync user@server1:/path/to/stuff /path/to/loca/copy -a --delete --compress
rsync /path/to/loca/copy user@server2:/path/to/where/stuff/should/go -a --delete --compress

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

একটি টানেল তৈরি করা যাতে সার্ভারগুলি কার্যকরভাবে একে অপরের সাথে আরও সরাসরি কথা বলতে পারে তার মতো সম্ভব হওয়া উচিত:

  1. সার্ভার 2 এ / বিন / শ / / ইউএসআর / লোকাল / বিন / শফারকিপালাইভ হিসাবে একটি অনুলিপি করুন। অনুলিপিটির পরিবর্তে প্রতীকী লিঙ্কটি ব্যবহার করুন তারপরে আপনাকে প্যাচ / বিন / শ সুরক্ষা আপডেটের পরে এটি আপডেট করতে হবে না।
  2. সার্ভার 2-তে একটি স্ক্রিপ্ট তৈরি করুন যা কয়েক সেকেন্ডের জন্য ঘুমের লুপ ছাড়া আর কিছুই করে না তারপরে স্বল্প পরিমাণে পাঠ্য প্রতিধ্বনিত করে এবং এইচ এর "কপি" ব্যবহার করুন:

    #!/usr/local/bin/shforkeepalive
    while [ "1" != "0" ]; do
            echo Beep!
            sleep 5
    done
    

    ( echoসম্ভবত সম্ভবত প্রয়োজন নেই, কারণ এসএসএইচডি এসএসএইচডি ক্লায়েন্টের কাছ থেকে রাখার জন্য প্যাকেটগুলি উপেক্ষা করার জন্য কনফিগার করা থাকলেও সেশনটি দীর্ঘ সময়ের জন্য অলস হয়ে উঠবে না)

  3. এখন আপনি আপনার ল্যাপটপে এমন একটি স্ক্রিপ্ট লিখতে পারেন যা পটভূমিতে আপনার বিপরীত টানেলটি শুরু করে, সার্ভার 1 কে কপি অপারেশন সম্পাদন করতে আরএসসিএনসি ব্যবহার করতে বলে, তারপরে লুপিং স্ক্রিপ্টটি (যা এসএসএইচ সেশনটি বন্ধ করবে) মেরে বিপরীত সুড়ঙ্গকে মেরে ফেলে:

    #!/bin/sh
    ssh user@server2 -L2222:127.0.0.1:22 /usr/local/bin/keepalivesctipt &
    ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'
    ssh user@server2 killall shforkeepalive
    

এটি যেভাবে কাজ করে:

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

এটি বিশেষভাবে পরিষ্কার মনে হয় না, তবে এটি কাজ করা উচিত। আমি উপরেরটি পরীক্ষা করে নি তাই আপনার এটির টুইট করার প্রয়োজন হতে পারে। সার্ভার 1-এ rsync কমান্ডটি একক লাইন স্ক্রিপ্ট তৈরি করা কলিংয়ের এসএসএস কমান্ডের মতো 'অক্ষরগুলি থেকে রক্ষা পাওয়ার কোনও প্রয়োজন হ্রাস করে সাহায্য করতে পারে।

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

সম্পাদনা করুন: / বিন / এস-এর অনুলিপিগুলি এবং সার্ভার 2-এ একটি পৃথক কী-লাইভ স্ক্রিপ্ট সহ সমস্ত মাতামাতি এড়ানোর জন্য হারুনের সাথে আমার হ্যাকটি মার্জ করা আপনার ল্যাপটপের এই লিপিটি পুরো কাজটি করা উচিত:

#!/bin/sh
ssh user@server2 -L2222:127.0.0.1:22 sleep 60 &
pid=$!
trap "kill $pid" EXIT 
ssh user@server1 -R2222:127.0.0.1:2222 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'

উপরের মতো, আরএসসিএনসি লোকালহোস্টের সাথে সংযুক্ত হচ্ছে: 2222 যা আপনার ট্যাপেলের মাধ্যমে আপনার ল্যাপটপের লোকালহোস্ট: 2222 এ টানেলটি ফরোয়ার্ড করে যা অন্য টানেলের মাধ্যমে সার্ভার 2 এর লোকালহোস্ট: 22 এ ফরোয়ার্ড করে।

সম্পাদনা 2: আপনার যদি সার্ভার 1 এর এমন কী রয়েছে যা এটি সরাসরি সার্ভার 2 এর সাথে প্রমাণীকরণের অনুমতি দেয় (যদিও এটি কোনও টানেল ছাড়া সার্ভার 2 দেখতে পাচ্ছে না) আপনি আরও সহজ করতে পারবেন:

#!/bin/sh
ssh user@server1 -R2222:123.123.123:22 rsync /path/to/stuff user@127.0.0.1:/destination/path/to/update -a --delete --compress -e 'ssh -p 2222'

যেখানে 123.123.123.123 হ'ল সার্ভার 2 এর একটি সর্বজনীন ঠিকানা, যা কোনও স্ক্রিপ্টের পরিবর্তে অনুলিপি + পেস্ট ওয়ান-লাইনার হিসাবে ব্যবহার করা যেতে পারে।


এটি প্রচুর পরিমাণে ডেটা (20 + গিগাবাইট) এবং আমি স্থানীয়ভাবে সঞ্চয় করার চেয়ে একই সময়ে এটিকে প্রবাহিত এবং আউটপুট করতে পছন্দ করি। আমি আমার পিসির মাধ্যমে ডেটা স্ট্রিম করতে চাই যাতে কিছু না সঞ্চয় হয়। আপনি "জিজ্ঞাসা করবেন না" সম্পর্কে ঠিক বলেছেন, এটি একটি ভাল কারণেই হোক for
নিয়মিত

প্লাজে মূল প্রশ্নে নতুন সম্পাদনাগুলি দেখুন
নিয়মিত

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

হুররে!!! এটি কাজ করে! ১. আরএসএ কী এর জন্য, টিল্ডি ব্যবহার করতে পারবেন না, "/ রুট /" ব্যবহার করতে হয়েছিল। ২. এখানে চূড়ান্ত ssh -R 2200:SERVER2:22 root@SERVER1 "rsync -e 'ssh -p 2200 -i /root/.ssh/id_rsa_ROOT_ON_SERVER2' --stats --progress -vaz /path/to/big/files root@localhost:/destination/path"
কমান্ডলাইনটি রয়েছে

হাই @ ডেভিড, এই দুর্দান্ত হ্যাকের জন্য ধন্যবাদ। তবে এটি কাজ করার জন্য, আমার উভয় সমাধান (প্রথম এবং দ্বিতীয় সম্পাদনা) ব্যবহার করে সার্ভার 1-এ সার্ভার 2-এর কী প্রয়োজন। আমি মনে করি এটি স্বাভাবিক (পোর্ট ফরওয়ার্ডিং বা না, সার্ভার 1 এখনও সার্ভার 2 এ অনুমোদনের চেষ্টা করছে), তবে আপনি লিখেন If you don't mind server1 having a key ...। আপনি কি আমাকে বলতে পারবেন সার্ভার 1 এ সার্ভার 2 এর কী থাকা সম্ভব না দয়া করে?
এসএসসিফফ

2

এখানে কয়েকটি পদ্ধতি রয়েছে যা সিঙ্ক্রোনাইজেশনটিকে একটি সাধারণ ওয়ান-লাইনারে পরিণত করে তবে কিছু সেটআপ কাজ প্রয়োজন।

  • সার্ভার 1 থেকে আপনার ডেস্কটপে একটি বিপরীত এসএসএস টানেল সেট আপ করুন (দুঃখিত, আমি আপনাকে .ssh/configআমার মাথার উপরের অংশটি জ্বলিয়ে বলতে পারি না )। আপনার ডেস্কটপ থেকে সার্ভার 2 এ সংযোগ দিয়ে এটি শৃঙ্খলাবদ্ধ করুন। সার্ভার 1 থেকে rsync চালান।

  • আপনার ডেস্কটপে একটি মোজা প্রক্সি সেট করুন (বা একটি HTTP প্রক্সি যা সংযোগ গ্রহণ করে)। সার্ভার 1 থেকে সার্ভার 2-তে একটি সংযোগ স্থাপন করতে এটি ব্যবহার করুন। সার্ভার 2 থেকে rsync চালান।

  • RSSync এর পরিবর্তে একসাথে ব্যবহার করুন । তবে কর্মপ্রবাহটি আলাদা।

  • Sshfs ব্যবহার করে আপনার ডেস্কটপে এক বা উভয় সার্ভার থেকে ডিরেক্টরিগুলি মাউন্ট করুন ।


1

কেন এক লাইনে? একটি ছোট শেল স্ক্রিপ্ট ব্যবহার করুন:

#!/bin/bash
# Run me on server1

# Create the port forward server1 -> desktop -> server2 (i.e.
# the first forward creates a second tunnel running on the desktop)
ssh -L/-R ... desktop "ssh -L/-R ... server2 sleep 1h" &    
pid=$!

# Kill port forward process on exit and any error
trap "kill $pid" EXIT 

rsync -e ssh /path/to/files/ root@localhost:/path/to/files/on/server2

আইআইআরসি, আপনি ঘুমের সময় কম সেট করতে পারেন; sshযতক্ষণ কেউ চ্যানেল ব্যবহার করেন ততক্ষণ প্রথমটি শেষ হবে না।


আমি প্রায় নিশ্চিত rsync SSH- র মাধ্যমে দুই দূরবর্তী সার্ভারের মধ্যে অপারেট করতে পারে না যে আছি যে ভাবে (শুধুমাত্র local-> দূরবর্তী বা remote-> স্থানীয়) - যদিও আপনার ব্যবহার sleepএবং trapneater চেয়ে আমার উত্তরে পদ্ধতি "জীবিত রাখা এবং বধ" হয় ।
ডেভিড স্পিললেট

আসল প্রশ্নে সম্পাদনা দেখুন।
নিয়মিত

জঘন্য, আপনি ঠিক বলেছেন। কমান্ড লিংকে যুক্তি হিসাবে দুটি হোস্টকে নির্দিষ্ট করার অনুমতি নেই। ...
হুমম

ঠিক আছে, আমি আমার সমাধানটি উন্নত করেছি। সার্ভার 1 এ সার্ভার 2 এর ssh পরিষেবাটি দৃশ্যমান করতে আপনাকে দুটি বন্দর ফরোয়ার্ড তৈরি করতে হবে।
অ্যারন দিগুল্লা

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