রিমোট মেশিনে কমান্ড চালানোর জন্য স্থানীয় মেশিন থেকে শেল স্ক্রিপ্ট, তারপরে লোকাল মেশিনে চালিয়ে যান


10

সমস্যাটি হ'ল: আমি একটি দূরবর্তী মেশিন থেকে ফাইলগুলি অনুলিপি করতে চাই।

আমি শেল স্ক্রিপ্ট লেখার এমন একটি উপায় খুঁজছি যা দূরবর্তী মেশিনের সাথে সংযুক্ত হবে, সঞ্চিত ফাইলটির অবস্থান পাবে, একবার আমি দূরবর্তী সার্ভার থেকে অবস্থানটি সংযোগ বিচ্ছিন্ন করে এবং স্থানীয় মেশিনের মধ্যে থেকে প্রাপ্ত অবস্থানের সাথে স্ক্রিপ ব্যবহার করব ফাইলটি অনুলিপি করুন

বিশেষত, আমি কীভাবে কোনও স্ক্রিপ্ট থেকে জানতে চাই, আমি একটি দূরবর্তী মেশিনে সংযোগ করব, সেই মেশিনে কাজ করব। সংযোগ বিচ্ছিন্ন করুন এবং স্থানীয়ভাবে কার্যকর করা চালিয়ে যান।

উত্তর:


15

সমাধান 1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

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

সমাধান 2:

ssh user@host "determine_path; cat filename" >local_filename

এটি প্রত্যন্ত থেকে সরাসরি ফাইলটি সন্ধান এবং আউটপুট করে এবং স্থানীয়ভাবে এটি কোনও ফাইলে পুনর্নির্দেশ করে কাজ করে। এই স্কিপ স্কিপ এটির জন্য "বিড়াল" এর পূর্ববর্তী পদক্ষেপগুলির আউটপুট না থাকা দরকার (যা আপনি &> / dev / নাল দিয়ে সমাধান করতে পারেন)।


1
পৃথক ssh + scp এর পরিবর্তে কীভাবে একটি সংযোগ দিয়ে পুরো সমস্যাটি সমাধান করবেন তা দেখানোর জন্য +1।
পিটার কর্ডস

সমস্ত উত্তর সহায়ক তবে এইটি আমার সমস্যাটির সুনির্দিষ্টভাবে সমাধান করে
gnsr

20

আপনি নিম্নলিখিত বিন্যাসে একটি স্ক্রিপ্ট লিখতে পারেন:

command1
command2
...
ssh user@machine command3
...
command4
command5

command3আপনাকে পাসওয়ার্ডের জন্য অনুরোধ না করে এক্সিকিউট করার জন্য আপনাকে এসএসএইচ কী সেটআপ করতে হবে ।


2
এটি লক্ষণীয় করা উচিত যে এটি সিঙ্ক্রোনাস দ্বারা। যদিও ssh user@remote command3চলছে, command4শুরু করতে পারে না
AAAAA মনিকা পুনর্বহাল বলেছেন

3
আপনি যদি না করেন তবে @aaaaassh user@machine command3 &
ইসহাক

3
@ ইসহাক হ্যাঁ, আমার বক্তব্যটি হয় অভিলাষজনক আচরণ হতে পারে তবে এটি যথাযথ সিদ্ধান্ত হওয়া উচিত
মনিকা পুনরুদ্ধার

2

আমি ধরে নিয়েছি যে আপনি যে ফাইলটি অনুলিপি করতে চান তা আপনি কীভাবে সনাক্ত করতে পারেন এবং আপনি কোনও স্ক্রিপ্ট বা কমান্ডের সেট লিখতে সক্ষম হয়েছিলেন যা দূরবর্তী যন্ত্রটিতে চালিত হবে যা এই সনাক্তকরণটি করে? ।

তদুপরি আমি আরও ধরে নেব যে এই কমান্ডগুলি স্ট্যান্ডার্ড আউটপুটে ফাইলের পুরো পাথ, বা অনুলিপিটির জন্য এসএসএইচ ব্যবহারকারীর হোম ডিরেক্টরি সম্পর্কিত ফাইলের আপেক্ষিক পাথ প্রিন্ট করে। আমার উদাহরণস্বরূপ, স্ক্রিপ্টটির নাম "getfilepath.sh", যদিও এটি শেল স্ক্রিপ্ট হতে হবে না, এটি অন্য কিছু এক্সিকিউটেবল বা এমনকি কমান্ডের একটি সিরিজ হতে পারে।

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

উপরের কোডে, "$ ()" নোটেশন শেল ভেরিয়েবল হিসাবে কমান্ডের স্ট্যান্ডার্ড আউটপুট ক্যাপচার করার একটি উপায়। এটি মোটামুটি স্ট্যান্ডার্ড, তবে আপনি যদি এমন শেল ব্যবহার করেন যা এটি বোঝে না, আপনি পরিবর্তে কমান্ডটি "ব্যাক-টিক্স" দিয়ে ঘিরে ফেলতে পারেন, যা বেশিরভাগ মার্কিন কীবোর্ডের 1 কী এর বামে উচ্চারণ চিহ্ন রয়েছে।


0

সম্ভবত সমস্ত কাজ করে এমন রিমোট মেশিনে একটি নির্ধারিত টাস্কটি ট্রিগার করা সম্ভব।

আপনি অনুলিপি করতে চান এমন ফাইলগুলির অবস্থান অনুসন্ধান করার সময় এটি আপনাকে দূরবর্তী মেশিনে সংযুক্ত মৌমাছির প্রতিরোধ করবে।

আমি এটি করছি:

কোম্যান্ড লাইনটি একটি নির্ধারিত কাজটি ট্রিগার করে যা আমার ক্ষেত্রে একটি ব্যাচস্ক্রিপ্ট কার্যকর করে।

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

শুভেচ্ছান্তে

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