শেল স্ক্রিপ্ট ব্যবহার করে স্কিপ ফাইল স্থানান্তর স্বয়ংক্রিয় করুন


84

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


4
আপনি কি দয়া করে আমাকে বলতে পারবেন যে আরএসসিএনএল সহ শেল স্ক্রিপ্টে একটি পাসওয়ার্ড ব্যবহার করে বা আপনি যদি তা চেষ্টা করে থাকেন? ধন্যবাদ

উত্তর:


90

শেল স্ক্রিপ্টে হার্ডকোডিং পাসওয়ার্ডের পরিবর্তে, এসএসএইচ কীগুলি ব্যবহার করুন, এটি সহজ এবং সুরক্ষিত।

$ scp -i ~/.ssh/id_rsa *.derp devops@myserver.org:/path/to/target/directory/

আপনার ব্যক্তিগত কীটি ধরেছে ~/.ssh/id_rsaএবং আপনি যে ফাইলগুলি প্রেরণ করতে চান সেগুলি দিয়ে ফিল্টার করা যেতে পারে*.derp

একটি সর্বজনীন / ব্যক্তিগত কী জুড়ি উত্পন্ন করতে:

$ ssh-keygen -t rsa

উপরেরগুলি 2 টি ফাইল, ~/.ssh/id_rsa(ব্যক্তিগত কী) এবং ~/.ssh/id_rsa.pub(সর্বজনীন কী) উত্পন্ন করবে

ব্যবহারের জন্য এসএসএইচ কীগুলি সেট আপ করতে (এক সময়ের টাস্ক): সামগ্রীগুলির অনুলিপি করুন এবং সার্ভারে ~/.ssh/id_rsa.pubএকটি নতুন লাইনে পেস্ট করুন । যদি অস্তিত্ব না থাকে তবে নির্দ্বিধায় এটি তৈরি করুন।~devops/.ssh/authorized_keysmyserver.org~devops/.ssh/authorized_keys

কীভাবে কীভাবে গাইড তা এখানে পাওয়া যায়


4
এই নির্দেশাবলী অনুসরণ করার পরেও, আমাকে এখনও একটি পাসওয়ার্ডের জন্য অনুরোধ জানানো হচ্ছে ... আমি মিস করছি এমন অন্য কোনও মানদণ্ড রয়েছে কি?
স্কটিসিস

@ স্কটস্কুটার ওয়েইডেনকপফ কয়েকটি জিনিস ভুল হতে পারে যেমন .ssh dir বা অনুমোদিত_কাই ফাইলগুলির সঠিক অনুমতি (700) নাও থাকতে পারে।
প্রদীপ পাতি

4
@ প্রদীপপতি আমি আমার সমস্যাটি বুঝতে পেরেছি। আপনি ঠিক বলেছেন, সমস্যাটি ছিল অনুমতিগুলি। আপনার প্রদত্ত লিঙ্কটিতে লেখক কিছু অনুমতি পরিবর্তনের কথা উল্লেখ করেছেন। আমি এই পরিবর্তনগুলি করেছি, এবং এখন সবকিছু কাজ করে।
স্কটিসিস

4
এই সমাধানটির অনুলিপি-অনুলিপি ব্যবহারের সাথে বিভ্রান্তি এড়াতে সাহায্য করার জন্য, বর্তমানে এই উত্তরটি স্থানীয় থেকে দূরবর্তী স্থানান্তর করে মনে হচ্ছে - যা ওপি যা করতে চাইছে তার বিপরীতে।
Ciabaros

@ সাইবারোস ভাল ধরা! আমি উত্তর আপডেট। ধন্যবাদ!
প্রদীপ পাতি

42
#!/usr/bin/expect -f

# connect via scp
spawn scp "user@example.com:/home/santhosh/file.dmp" /u01/dumps/file.dmp
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "PASSWORD\r"
  }
}
interact

http://blogs.oracle.com/SanthoshK/entry/automate_linux_scp_command


উইন্ডোজ ব্যবহারকারীদের জন্য নোট: expectএমএসওয়াইএস 2- এ প্যাকেজটি পুরো আউটপুটটির সাথে মিলবে, সুতরাং 1 ম নিয়মটি সর্বদা মিলবে। আপনি যদি উভয় নিয়মের ক্রম বিনিময় করেন, আপনি পছন্দসই আচরণ পান।
fzbd


16

আপনি rsync ব্যবহার করতে পারেন। এটি scp IMHO এর চেয়ে একাধিক ফাইলের জন্য আরও ভাল কাজ করছে বলে মনে হচ্ছে।

আরএসআইএনসি -ভজ / পাথ / টু / দির / ইউজার @ রিমোট: / পাথ / টু / রিমোট / দির /

হালনাগাদ

আপনি '-e' স্যুইচ যোগ করে ssh এর মাধ্যমে rsync ব্যবহার করতে পারেন:

rsync -avzh -e ssh / পাথ / do / dir / ব্যবহারকারী @ রিমোট: / পথ / থেকে / দূরবর্তী / দির /

4
Scp ist সম্পর্কে দুর্দান্ত জিনিস এটি একটি সুরক্ষিত চ্যানেল ব্যবহার করে। আরএসএনসি না।

4
আপনি rsync কে ssh ব্যবহার করতে বাধ্য করতে পারেন: 'rsync -avz -e ssh রিমোটিউজার @ রিমোটহোস্ট: / রিমোট / দির / এই / দির /'

@ ফ্লোকরা। ধন্যবাদ, আমি আপডেটটি যুক্ত করার মাঝখানে ছিলাম এবং বিভ্রান্ত হয়ে পড়েছিলাম।
বিস্কো

9
এটি এখনও একটি ইন্টারেক্টিভ পাসওয়ার্ড প্রম্পট শুরু করবে। আমি বিশ্বাস করি যে ওপি একটি সম্পূর্ণ স্বয়ংক্রিয় সমাধান চায়
টম অগার

@ দিমিত্রি স্কিপ-র ফাইলগুলি পুনরাবৃত্তভাবে অনুলিপি করে। স্ক্রিপ্টের মধ্যে একটি পাসওয়ার্ড সংরক্ষণ এবং এটি স্ক্রিপ্ট কলটিতে বাশ স্ক্রিপ্টের মাধ্যমে পাস করার সাথে কিছু করার নেই! আমি সত্যিই আপনার মন্তব্য বুঝতে পারি না।
টম অগার

9
#!/usr/bin/expect -f
spawn scp -r BASE.zip abhishek@192.168.1.115:/tmp
expect "password:"
send "wifinetworks\r"
expect "*\r"
expect "\r"

প্রত্যাশা কি rsync জন্য ব্যবহার করা যাবে? আমি কিছু করার চেষ্টা করছি এবং আমার আরএসএ কী পদ্ধতিটি কাজ করছে না। এটি আমাকে দূরবর্তী মেশিনের জন্য পাসওয়ার্ড জিজ্ঞাসা করে।

5

ওয়াইল্ডকার্ড বা একাধিক ফাইল সম্পর্কে কী?

scp file1 file2 more-files* user@remote:/some/dir/

4

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

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


এক অবস্থান থেকে অন্য স্থানে ফোল্ডার অনুলিপি করা হচ্ছে

   #!/usr/bin/expect -f   
   spawn rsync -a -e ssh username@192.168.1.123:/cool/cool1/* /tmp/cool/   
   expect "password:"   
   send "cool\r"   
   expect "*\r"   
   expect "\r"  

3

আপনি যদি স্ক্রিপ্টের প্রতিটি রানের জন্য একবার আপনার পাসওয়ার্ড প্রবেশ করানো ঠিক করেন তবে আপনি এসএসএইচ মাস্টার সংযোগটি ব্যবহার করে খুব সহজেই এটি করতে পারেন।

#!/usr/bin/env bash

USER_AT_HOST="user@host"  # use "$1@$2" here if you like
SSHSOCKET=~/".ssh/$USER_AT_HOST"

# This is the only time you have to enter the password:
# Open master connection:
ssh -M -f -N -o ControlPath="$SSHSOCKET" "$USER_AT_HOST"

# These do not prompt for your password:
scp -o ControlPath="$SSHSOCKET" file1.xy "$USER_AT_HOST":remotefile1.xy
scp -o ControlPath="$SSHSOCKET" file2.xy "$USER_AT_HOST":remotefile2.xy

# You can also use the flag for normal ssh:
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo hello"
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo world"

# Close master connection:
ssh -S "$SSHSOCKET" -O exit "$USER_AT_HOST"

2

আপনি এটি কেবল ssh পাবলিক / প্রাইভেট কী দিয়ে করতে পারেন। অথবা পুট্টি ব্যবহার করুন যাতে আপনি পাসওয়ার্ড সেট করতে পারেন। scp কমান্ড লাইনে পাসওয়ার্ড দেওয়ার পক্ষে সমর্থন করে না।

আপনি পাবলিক / প্রাইভেট কীগুলির জন্য নির্দেশাবলী এখানে পেতে পারেন: http://www.softpanorama.org/ নেট / অ্যাপ্লিকেশন_মেলা / এসএসএইচ / এসসিপি.শটিএমএল


1

এটি কাজ করবে:

#!/usr/bin/expect -f

spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no file1 file2 file3 user@host:/path/
expect "password:"
send "xyz123\r"
expect "*\r"
expect "\r"
interact

1

.pem কী ফাইল সহ এসসিপির পক্ষে বাশ কোড এখানে। এটি একটি স্ক্রিপ্ট.শ ফাইল এ সংরক্ষণ করুন এবং তারপরে 'sh স্ক্রিপ্ট.শ' দিয়ে চালান

উপভোগ করুন

#!/bin/bash
#Error function
function die(){
echo "$1"
exit 1
}

Host=ec2-53-298-45-63.us-west-1.compute.amazonaws.com
User=ubuntu
#Directory at sent destination
SendDirectory=scp
#File to send at host
FileName=filetosend.txt
#Key file
Key=MyKeyFile.pem

echo "Aperture in Process...";

#The code that will send your file scp
scp -i $Key $FileName $User@$Host:$SendDirectory || \
die "@@@@@@@Houston we have problem"

echo "########Aperture Complete#########";


-1

কমান্ডটি scptraditionalতিহ্যবাহী ইউনিক্সের মতো ব্যবহার করা যেতে পারে cp। আপনি যদি তাই করেন:

scp -r myDirectory/ mylogin@host:TargetDirectory

কাজ করবে


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