আপনার স্ক্রিপ্ট দুটি দোভাষীকে একত্রিত করার চেষ্টা করছে। আপনি উভয় আছে #!/bin/bash
এবং #!/usr/bin/expect
। যে কাজ করবে না। আপনি কেবল দুটির মধ্যে একটি ব্যবহার করতে পারেন। bash
প্রথম থেকেই , আপনার স্ক্রিপ্টটি ব্যাশ স্ক্রিপ্ট হিসাবে চালানো হচ্ছে run
যাইহোক, আপনার স্ক্রিপ্ট মধ্যে আপনি expect
যেমন কমান্ড spawn
এবং send
। যেহেতু স্ক্রিপ্টটি দ্বারা bash
এবং না দ্বারা পড়া হচ্ছে তাই এটি expect
ব্যর্থ হয়। আপনি বিভিন্ন expect
স্ক্রিপ্ট লিখতে এবং আপনার bash
স্ক্রিপ্ট থেকে তাদের কল করে বা পুরো জিনিসটি অনুবাদ করে এটি পেতে পারেন expect
।
যদিও সবচেয়ে ভাল উপায় এবং যে কোনও সাধারণ পাঠ্য ফাইলে আপনার পাসওয়ার্ডগুলি সরল পাঠ্যে থাকা ভয়াবহ অনুশীলনকে এড়িয়ে চলেছে তা হল এর পরিবর্তে পাসওয়ার্ডহীন এসএসএস সেটআপ করা। এইভাবে, scp
কোনও পাসওয়ার্ডের প্রয়োজন হবে না এবং আপনার প্রয়োজন নেই expect
:
প্রথমে আপনার মেশিনে একটি পাবলিক এসএস কী তৈরি করুন:
ssh-keygen -t rsa
আপনাকে একটি পাসফ্রেজ জিজ্ঞাসা করা হবে যা আপনাকে প্রতিটি লগইনের পরে প্রথমবার কোনও ssh কমান্ড চালানোর সময় আপনাকে প্রবেশ করতে বলা হবে। এর অর্থ হ'ল একাধিক ssh বা scp কমান্ডের জন্য আপনাকে কেবল এটি একবার প্রবেশ করতে হবে। সম্পূর্ণ পাসওয়ার্ডহীন অ্যাক্সেসের জন্য পাসফ্রেজটি খালি ছেড়ে দিন।
একবার আপনি আপনার সর্বজনীন কী উত্পন্ন করার পরে, এটি আপনার নেটওয়ার্কের প্রতিটি কম্পিউটারে অনুলিপি করুন:
while read ip; do
ssh-copy-id -i ~/.ssh/id_rsa.pub user1@$ip
done < IPlistfile.txt
IPlistfile.txt
প্রতিটি লাইনে একটি সার্ভার নাম অথবা IP ধারণকারী একটি ফাইল হতে হবে। উদাহরণ স্বরূপ:
host1
host2
host3
যেহেতু আপনি প্রথমবার এটি করছেন, আপনাকে প্রতিটি আইপির জন্য ম্যানুয়ালি পাসওয়ার্ড প্রবেশ করতে হবে তবে একবার এটি সম্পন্ন করার পরে, আপনি এই মেশিনের যে কোনও একটিতে ফাইলগুলি অনুলিপি করতে সক্ষম হবেন:
scp file user@host1:/path/to/file
আপনার স্ক্রিপ্ট থেকে প্রত্যাশা সরান। এখন আপনার পাসওয়ার্ডবিহীন অ্যাক্সেস রয়েছে, আপনি আপনার স্ক্রিপ্টটি ব্যবহার করতে পারেন:
#!/bin/bash
echo "I will fail if you give junk values!!"
echo " "
echo "Enter file name: "
read filePath
echo " "
echo "Where you want to copy?"
echo "Enter"
echo "1. if Host1"
echo "2. if Host2"
echo "3. if Host3"
read choice
echo " "
if [ $choice -eq "1" ]
then
scp filePath uname@host1:/usr/tmp
elif [ $choice -eq "2" ]
then
scp filePath uname@host2:/usr/tmp
elif [ $choice -eq "3" ]
then
scp filePath uname@host3:/usr/tmp
else
echo "Wrong input"
fi