كيفية تشغيل الأمر sftp بكلمة مرور من البرنامج النصي Bash؟




shell unix (6)

ادمج sshpass مع ملف بيانات اعتماد مؤمّنة ، وعمليًا ، إنه آمن مثل أي شيء - إذا كان لديك الجذر في المربع لقراءة ملف بيانات الاعتماد ، فستتوقف جميع الرهانات على أي حال.

أحتاج إلى نقل ملف سجل إلى مضيف بعيد باستخدام sftp من مضيف Linux. لقد قدمت أوراق اعتماد لنفسه من مجموعة العمليات الخاصة بي. ومع ذلك ، بما أنني لا أملك السيطرة على مضيف آخر ، لا يمكنني إنشاء مفاتيح RSA ومشاركتها مع المضيف الآخر.

فهل هناك طريقة لتشغيل الأمر sftp (مع اسم المستخدم / كلمة المرور المقدمة) من داخل البرنامج النصي Bash من خلال مهمة cron ؟

لقد وجدت سؤالًا مشابهًا حول Stack Overflow ، حدد كلمة المرور إلى sftp في نص Bash ، ولكن لم يكن هناك إجابة مرضية لمشكلتي.


توقع هو برنامج رائع للاستخدام.

على أوبونتو تثبيته مع:

sudo apt-get install expect

على جهاز CentOS قم بتثبيته مع:

yum install expect

لنفترض أنك تريد إجراء اتصال بخادم sftp ثم تحميل ملف محلي من جهازك المحلي إلى خادم sftp عن بعد

#!/usr/bin/expect

spawn sftp [email protected]
expect "password:"
send "yourpasswordhere\n"
expect "sftp>"
send "cd logdirectory\n"
expect "sftp>"
send "put /var/log/file.log\n"
expect "sftp>"
send "exit\n"
interact

هذا يفتح اتصال sftp بكلمة المرور الخاصة بك إلى الخادم.

ثم ينتقل إلى الدليل الذي تريد تحميل ملفك ، في هذه الحالة "logdirectory"

هذا يحمّل ملف سجل من الدليل المحلي الموجود في / var / log / مع اسم الملف كونه file.log إلى "logdirectory" على الخادم البعيد


لديك بعض الخيارات بخلاف استخدام مصادقة المفتاح العمومي:

  1. استخدم keychain
  2. استخدم sshpass (أقل أمانًا ولكن ربما يفي بمتطلباتك)
  3. expect الاستخدام (يلزم تأمين أقل وتشفير أكثر)

إذا قررت منح sshpass فرصة هنا ، فستكون مقتطفًا نصيًا يعمل للقيام بذلك:

export SSHPASS=your-password-here
sshpass -e sftp -oBatchMode=no -b - [email protected] << !
   cd incoming
   put your-log-file.log
   bye
!

لقد طُلب مني في الآونة الأخيرة التبديل من بروتوكول نقل الملفات إلى sftp ، من أجل تأمين نقل الملفات بين الخوادم. نحن نستخدم حزمة Tectia SSH ، والتي لديها خيار - --password مرور لتمرير كلمة المرور على سطر الأوامر.

مثال: sftp --password="password" "userid"@"servername"

مثال على الدفعة:

(
  echo "
  ascii
  cd pub
  lcd dir_name
  put filename
  close
  quit
    "
) | sftp --password="password" "userid"@"servername"

ظننت أنني يجب أن أشارك هذه المعلومات ، حيث كنت أبحث في مواقع مختلفة ، قبل تشغيل أمر المساعدة ( sftp -h ) ، وكنت مندهشًا لرؤية خيار كلمة المرور.


يمكنك استخدام lftp بشكل تفاعلي في برنامج نصي shell بحيث لا يتم حفظ كلمة المرور في .bash_history أو ما شابه ذلك عن طريق القيام بما يلي:

vi test_script.sh

أضف ما يلي إلى ملفك:

#!/bin/sh
HOST=<yourhostname>
USER=<someusername>
PASSWD=<yourpasswd>

cd <base directory for your put file>

lftp<<END_SCRIPT
open sftp://$HOST
user $USER $PASSWD
put local-file.name
bye
END_SCRIPT

واكتب / أغلق محرر vi بعد تحرير المضيف ، والمستخدم ، وتمرير ، ودليل كتابة :wq .ثم اجعل البرنامج النصي الخاص بك قابل للتنفيذ chmod +x test_script.sh وتنفيذه ./test_script.sh .


يمكنك استخدام sshpass لذلك. فيما يلي الخطوات

  1. تثبيت sshpass لأوبونتو - sudo apt-get install sshpass
  2. أضف IP البعيد إلى ملف مضيفك المعروف إذا كانت المرة الأولى بالنسبة لـ Ubuntu -> ssh user @ IP -> أدخل "yes"
  3. إعطاء قيادة مجتمعة ل SCP و sshpass لذلك. فيما يلي نموذج لشفرة مواجهة الحرب إلى tomcat sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #[email protected]#RemoteIP:/var/lib/tomcat7/webapps






sftp