আমি কীভাবে একটি সময়ের মধ্যে "স্ট্রিম" কমান্ডের সাথে অবিরাম এসএসএইচ সংযোগ তৈরি করতে পারি?


9

বলুন যে আমার একটি পিসিতে একটি অ্যাপ্লিকেশন চলছে যা এসএসএইচ এর মাধ্যমে নেটওয়ার্কের অন্য পিসিতে কমান্ড প্রেরণ করছে (উভয় মেশিন লিনাক্স চালাচ্ছে)।

উদাহরণস্বরূপ প্রতিবার # 1-এ কিছু ঘটে, আমি # 2-তে একটি টাস্ক চালাতে চাই। এই সেটআপে আমাকে প্রতিটি কমান্ডে এসএসএইচ সংযোগ তৈরি করতে হবে।

কাস্টম ক্লায়েন্ট / সার্ভার অ্যাপ্লিকেশন প্রোগ্রামিং ছাড়াই বেসিক ইউনিক্স সরঞ্জামগুলির সাথে এটি করার কোনও সহজ উপায় আছে? মূলত আমি যা চাই তা হ'ল এসএসএইচের সাথে একটি সংযোগ স্থাপন করা এবং তারপরে একের পর এক কমান্ড প্রেরণ করা।


উত্তর:


12

এটি উত্পাদনে ব্যবহার করা যায় কিনা তা নিশ্চিত নন তবে আপনি এরকম কিছু করতে পারেন:

# 1 এ ফাইল তৈরি করুন

1> touch /tmp/commands

তারপরে কমান্ড রান করুন:

1> tail -f /tmp/commands | ssh username@x.x.x.x

এটি ফাইল / টিএমপি / কমান্ডগুলি খুলবে এবং এর সামগ্রীটি সার্ভার xxxx (# 2) এ প্রেরণ শুরু করবে এবং এটি লাইন দিয়ে সেখানে চালিয়ে দেবে

এখন, প্রতিবার # 1 এ কিছু ঘটে:

1> echo "ls -l" >> /tmp/commands

অথবা

1> echo "reboot" >> /tmp/commands

আপনি ফাইল / টিএমপি / কমান্ডগুলিতে যা কিছু যোগ করবেন তা # 2 এ প্রেরণ করা হবে এবং কার্যকর হবে। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি কোনও ইন্টারেক্টিভ কিছু চালাচ্ছেন না বা এটি কোনওভাবে মোকাবেলা করবেন।


এটি ঠিক আমি সন্ধান করছি, খুব সৃজনশীল সমাধান :)
জাকুব আর্নল্ড

5
আমি যুক্ত করব যে আপনার ব্যবহার করা উচিত tail -F, যা সনাক্ত করবে যে ফাইলটি প্রতিস্থাপন করা হয়েছে, সুতরাং এটি জায়ান্ট হয়ে উঠলে আপনি এটি মুছতে এবং একটি নতুন ফাইল দিয়ে শুরু করতে পারেন।
ডিসফ্ক

3
@ ডারফকে, বিকল্পভাবে, mkfifo /tmp/commandsআরও ভাল সমাধান হওয়া উচিত
11'6 এ একাকী করুন


18

ওপেনএসএইচ ব্যবহার করে স্বয়ংক্রিয় দৃ Pers়তা

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

বৈশিষ্ট্যটি সক্ষম করতে, আপনি হয় -Mকমান্ড লাইন সুইচ হিসাবে ব্যবহার করতে পারেন বা ControlMasterআপনার বিকল্পটি সক্ষম করতে পারেন ~/.ssh/ssh_config, যেমন:

ControlMaster auto

অতিরিক্তভাবে, আপনার ControlPathনিম্নলিখিত লাইনগুলি ব্যবহার করে আপনার সেট করা উচিত ~/.ssh/ssh_config:

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

হোস্টের সাথে অবিরাম সংযোগ বজায় রাখার জন্য, যেমন আপনি যদি কোনও স্ক্রিপ্ট চালাতে চান যা হোস্টের সাথে অনেকগুলি ssh সংযোগ স্থাপন করতে হবে, যার মধ্যে কোনওটি স্ক্রিপ্টের পুরো জীবনকাল ধরে স্থির থাকে না, আপনি আগে থেকে নীরব সংযোগ শুরু করতে পারেন:

ssh -MNf remotehost

চেরিও, নেসোনো


আমি আপনার উত্তরটি ভোট দেওয়ার জন্য সার্ভারের ত্রুটিতে সাইন ইন করেছি। আপনার কাজ!
কর্মফল

ssh -Nরিমোট কমান্ড ছাড়াই একটি সেশন শুরু করে, ssh_config- তে কোনও সম্পর্কিত বিকল্প বলে মনে হচ্ছে না।
জোকস


2

আপনি যদি এই ধরণের জিনিসটিতে প্রচুর পরিমাণে চলে যান তবে সমান্তরাল চেষ্টা করুন । এটি ডিএসএস (বিতরণ শেল) এর মতো তবে কিছু পরিষ্কার ঝাঁকুনির মতো বৈশিষ্ট্য রয়েছে যেমন গণনা করা সেমফোরস এবং এটি সক্রিয়ভাবে বজায় রাখা হয়।

ডকুমেন্টেশন থেকে:

উদাহরণ: জিএনইউ সমান্তরাল সারি সিস্টেম / ব্যাচ ম্যানেজার হিসাবে

জিএনইউ সমান্তরাল একটি সাধারণ কাজের সারি সিস্টেম বা ব্যাচ ম্যানেজার হিসাবে কাজ করতে পারে। কাজটি কোনও ফাইলে রাখা এবং এটি থেকে জিএনইউ সমান্তরাল পড়া উচিত read জিএনইউ সমান্তরাল ফাইলের শেষে বন্ধ হয়ে যাওয়ায় আমরা পড়া চালিয়ে যাওয়ার জন্য লেজ ব্যবহার করি:

echo >jobqueue; tail -f jobqueue | parallel

আপনার কাজ সারিতে জমা দেওয়ার জন্য:

echo my_command my_arg >> jobqueue

আপনি অবশ্যই রিমোট কম্পিউটারগুলিতে চাকরি বিতরণের জন্য-এস ব্যবহার করতে পারেন:

echo >jobqueue; tail -f jobqueue | parallel -S ..

অনেকগুলি দুর্দান্ত উদাহরণ রয়েছে যা কেবল পৃষ্ঠকে স্ক্র্যাচ করে। এখানে একটি দুর্দান্ত।

উদাহরণ: স্থানীয় এবং দূরবর্তী কম্পিউটারগুলিতে কাজ বিতরণ

স্থানীয় কম্পিউটার এবং সার্ভার 2 এ সিপিইউ কোর প্রতি একটি প্রক্রিয়া চলছে * .mp3 থেকে * .ogg রূপান্তর করুন:

  parallel --trc {.}.ogg -j+0 -S server2,: \
  'mpg321 -w - {} | oggenc -q0 - -o {.}.ogg' ::: *.mp3

0

হ্যাঁ পাইপ দিয়ে এটি সম্ভব:

echo 'echo "hi"' | ssh -i my_private_key tester@host2

এটি হোস্ট 2-এ "হাই" কমান্ডটি কার্যকর করবে

আপনাকে কেবল একটি প্রোগ্রাম লিখতে হবে, যা কেবল কমান্ড দেয় (ভুলে যাবেন না;) এবং তারপরে সেই আউটপুটটি ssh এ পাইপ করুন


0

আপনি dsh (ডিস্ট্রিবিউটেড শেল) এর মতো প্রোগ্রামটি ব্যবহার করতে চাইতে পারেন যা কেবল এটি করা যায় :), এটি হোস্টের নাম দিয়ে কনফিগার করার পরে এবং পাবলিককেয়া আথ স্থাপন করার পরে, আপনি এটি একাধিক মেশিনে কমান্ড চালানোর জন্য সিরিজ ("রান") ব্যবহার করতে পারেন মেশিনে একটি তারপরে মেশিন বিতে চালান) বা প্যারালেলে ("একই সাথে সমস্ত মেশিনে চালান")। বা শুধু স্ক্রিপ্ট তৈরি করুন

#!/bin/sh
ssh machine -- $@
exec $@

0

অস্বীকৃতি: আমি এখনই এটি পরীক্ষা করতে পারছি না, কারণ আমি ব্যাশ সহ উইন্ডোজ মেশিনে আছি তবে এসএসএস ছাড়াই।

বাশ স্ক্রিপ্টে আপনি এর মতো কিছু করতে পারেন:

exec 4> >(ssh --ssh-options-here user@host)

এবং তারপরে কমান্ড প্রেরণ করতে, এফডি 4 এ লিখুন।

echo 'echo hi' >&4

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

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