سؤال

أعلم أنه غير مستحسن، ولكن هل من الممكن على الإطلاق تمرير كلمة مرور المستخدم إلى 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/ssh‌​pass.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

  1. تأكد من أن لديك أداة "توقع" قبل ذلك، وإذا لم يكن الأمر كذلك، فافعل ذلك

    # apt-get install expect

  2. قم بإنشاء ملف نصي بالمحتوى التالي.(# السادس /الجذر/ملف البرنامج النصي)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. قم بتنفيذ ملف البرنامج النصي باستخدام أداة "التوقع".

    # 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

مصدر: https://community.mapr.com/thread/9040

لقد وجدت هذه الإجابة مفيدة حقا هنا.

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

لا يمكنك فقط تمرير كلمة المرور إلى هناك، بل سيُظهر أيضًا شريط التقدم عند النسخ.رائع حقا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top