كيفية تمرير كلمة المرور إلى SCP؟
-
09-06-2019 - |
سؤال
أعلم أنه غير مستحسن، ولكن هل من الممكن على الإطلاق تمرير كلمة مرور المستخدم إلى scp؟
أرغب في نسخ ملف عبر scp كجزء من مهمة مجمعة ويحتاج الخادم المتلقي بالطبع إلى كلمة مرور، ولا يمكنني بسهولة تغيير ذلك إلى المصادقة المستندة إلى المفتاح.
نصائح أخرى
يستخدم com.sshpass:
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
أو حتى لا تظهر كلمة المرور في سجل bash
sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path
ما ورد أعلاه ينسخ محتويات المسار من المضيف البعيد إلى موقعك المحلي.
ثَبَّتَ :
- أوبونتو/ديبيان
apt install sshpass
- سنتوس/فيدورا
yum install sshpass
- ماك مع macports
port install sshpass
- ماك مع المشروب
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
فقط قم بإنشاء مفتاح ssh مثل:
ssh-keygen -t rsa -C "your_email@youremail.com"
انسخ محتوى ~/.ssh/id_rsa.pub
وأخيرًا إضافته إلى الأجهزة البعيدة ~/.ssh/authorized_keys
تأكد من أن الجهاز البعيد لديه الأذونات 0700 for ~./ssh folder
و 0600 for ~/.ssh/authorized_keys
إذا كنت تتصل بالخادم من نظام التشغيل Windows، فإن إصدار PuTTY من scp ("pscp") يتيح لك تمرير كلمة المرور باستخدام -pw
معامل.
يمكنك استخدام البرنامج النصي "توقع" على نظام التشغيل Unix/terminal
على سبيل المثال، قم بإنشاء "test.exp":
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass\r"; exp_continue}
}
تشغيل البرنامج النصي
expect test.exp
أتمنى أن يساعد ذلك.
يمكن استخدام cur كبديل لـ scp لنسخ ملف ويدعم كلمة مرور في سطر الأوامر.
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
هنا مثال لكيفية القيام بذلك مع expect
أداة:
sub copyover {
$scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
$scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
print $scp 'password' . "\n";
$scp->expect(30,"-re",'$\s') || die "Never got prompt from parent
+system:$!\n";
$scp->soft_close();
return;
}
لم يذكره أحد، ولكن المعجون الشوري (pscp) لديه خيار -pw لكلمة المرور.
يمكن العثور على الوثائق هنا: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp
تأكد من أن لديك أداة "توقع" قبل ذلك، وإذا لم يكن الأمر كذلك، فافعل ذلك
# apt-get install expect
قم بإنشاء ملف نصي بالمحتوى التالي.(# السادس /الجذر/ملف البرنامج النصي)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
قم بتنفيذ ملف البرنامج النصي باستخدام أداة "التوقع".
# expect /root/scriptfile
بمجرد الإعداد ssh-keygen
كما هو موضح أعلاه، يمكنك القيام به
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
إذا كنت تريد تقليل الكتابة في كل مرة، فيمكنك تعديل إعداداتك .bash_profile
ملف ووضع
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
ثم من المحطة الخاصة بك تفعل source ~/.bash_profile
.بعد ذلك إذا كتبت remote_scp
في المحطة الخاصة بك يجب تشغيل scp
الأمر بدون كلمة مرور.
يمكنك استخدام ssh-copy-id
لإضافة مفتاح ssh:
$which ssh-copy-id #check whether it exists
إذا كان موجودا:
ssh-copy-id "user@remote-system"
سيكون البديل هو إضافة النصف العام من مفتاح المستخدم إلى ملف المفاتيح المعتمدة على النظام الهدف.في النظام الذي تبدأ عملية النقل منه، يمكنك تشغيل برنامج ssh-agent وإضافة النصف الخاص من المفتاح إلى الوكيل.يمكن بعد ذلك تكوين المهمة المجمعة لاستخدام الوكيل للحصول على المفتاح الخاص، بدلاً من المطالبة بكلمة مرور المفتاح.
يجب أن يكون هذا ممكنًا على نظام UNIX/Linux أو على نظام Windows الأساسي باستخدام pageant وpscp.
خطوات الحصول على sshpass لـ rhel/centos 6:
# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass
لقد وجدت هذه الإجابة مفيدة حقا هنا.
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
لا يمكنك فقط تمرير كلمة المرور إلى هناك، بل سيُظهر أيضًا شريط التقدم عند النسخ.رائع حقا.