أتمتة SSH دون استخدام مصادقة المفاتيح العامة أو توقع (1)

StackOverflow https://stackoverflow.com/questions/271090

سؤال

هل هناك طريقة لتمرير كلمة مرور إلى SSH تلقائيًا. أرغب تلقائيًا في SSH إلى خادم بدون باستخدام مصادقة المفاتيح العامة أو توقع البرامج النصية ، من خلال الحصول على SSH بطريقة ما لقراءة كلمة المرور من stdin أو ملف.

والسبب في أنه يجب أن يكون بهذه الطريقة هو أنني أرغب في النسخ الاحتياطي لملفاتي إلى خادم باستخدام RSYNC/SSH تعمل كمهمة CRON. هذا الخادم يتصاعد دليل منزلي بعد، بعدما إنه يصادقني ، لذا فإن استخدام مصادقة المفاتيح العامة لا يعمل لأن ~/.ssh غير متوفر حتى ينجح تسجيل الدخول. توقع (1) غير وارد لأنني أرغب في تشغيله كوظيفة كرون ، وبما أن وظائف CRON لا تعمل تحت محطة ، فإن مزيجًا من التوقع/SSH لا يعمل. ليس لدي وصول جذر إلى هذا الخادم ، وسيكون من الصعب الحصول على المدراء لإجراء أي تغييرات على الطريقة التي تعمل بها الأشياء هناك.

هل كانت مفيدة؟

المحلول

يستخدم sshpass.

على سبيل المثال ، عندما تكون كلمة المرور في password.txt ملف:

sshpass -fpassword.txt ssh username@hostname

(مأخوذة من إجابة إلى أ سؤال مماثل)

نصائح أخرى

توقع أمر غير وارد لأنني أرغب في تشغيله كوظيفة كرون ، وبما أن وظائف CRON لا تعمل تحت محطة ، فإن الجمع بين التوقع/SSH لا يعمل فقط

يمكنك تشغيل البرامج النصية المتوقعة من CRON ، على الأقل يمكنك مع توقع مكتبات مثل "Pexpect" لـ Python. لقد اختبرت هذا للتو للتأكيد ، حيث قمت بتشغيل برنامج نصي Pexpect SCP/SSH من CRON وتمكنت من SCP بنجاح من برنامج من برنامج Python الذي يعمل في CRON.

رمز المثال:

#!/usr/bin/python

import pexpect

FILE="/path/to/file"
REMOTE_FILE=""
USER="user"
HOST="example.com"
PASS="mypass"
COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE)

child = pexpect.spawn(COMMAND)
child.expect('password:')
child.sendline(PASS)
child.expect(pexpect.EOF)
print child.before

بدلاً من تمرير كلمة المرور الخاصة بك ، استخدم نظام المفاتيح العامة/الخاصة. أضف المفتاح العمومي للحصول على جهاز إلى قائمة المفاتيح المعتمدة على جميع الآلات التي تريد الاتصال بها. باستخدام هذه الطريقة ، يمكن لـ SSH التحقق من صحة المفاتيح تلقائيًا ولا يلزم وجود كلمة مرور.

يمكنك العثور على تعليمات هنا: http://linuxproblem.org/art_9.html

نظرًا لأنني قرأت فقط السؤال بعناية أكبر ، فقد ترغب في النظر حول عميل SSH مختلف يدعم مصادقة كلمة المرور دون تفاعل المستخدم. لقد ألمحت بحث Google إلى وجودها (http://www.derkeiler.com/newsgroups/comp.security.ssh/2004-12/0134.html)

أسئلة Stackoverflow ذات الصلة:

تتحدث هذه المناقشة حول ما تحاول القيام به:

http://cygwin.com/ml/cygwin/2004-02/msg01449.html

إذا لم تتمكن من جعل المسؤول إنشاء دليل محلي لك ، فلن يعمل هذا.

يتطلب SSH "قفزة الإيمان" لتأمين المصافحة الأولية ضد العبث في المستقبل. (أنت تثق في البداية بالمفتاح الذي يمنحكه الخادم)

أحد النهج الذي يمكن الجاذبية حاليًا ولكن غير معروف هو استخدام SSH-SRP. يستخدم هذا معرفة كلمة المرور المتبادلة لمصادقةك وتوفير مفاتيح تشفير الجلسة اللازمة لتشفير جلسة SSH الخاصة بك بشكل آمن.

إنه أكثر أمانًا من "Trust Me" من SSH ولا يتطلب تخزين المفاتيح على المدى الطويل.

لا تستخدم توقع ، Pexpect أو Like لتتغذى في كلمة المرور. إذا قمت بذلك ، يجب أن تكون كلمة المرور الخاصة بك في مكان ما في النص العادي ، والتي يمكن أن تكون في الواقع أقل تأمين من استخدام زوج المفتاح العام/الخاص بدون كلمة مرور. وأكثر عملًا!

اقرأ هذه الصفحة من "SSH: الدليل النهائي" لمناقشة خياراتك:http://www.snailbook.com/faq/no-passphrase.auto.html

لقد أسيء فهم كيفية عمل مصادقة المفاتيح العامة. لا تحتاج إلى الوصول إلى الدليل المنزلي عن بعد ، ببساطة ضع المفتاح العام المحلي في جهاز التحكم عن بُعد authorized_keys ملف. لديك Google حولها ، هناك الكثير من الأدلة.

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