سؤال كيف يمكنني إعداد تسجيل الدخول بدون كلمة مرور SSH؟


أريد أن أتمكن من تسجيل الدخول إلى جهاز تحكم عن بعد عبر ssh دون الحاجة إلى إدخال كلمة المرور طوال الوقت.

  • كيف أقوم بإعداده؟
  • هل هناك أمر مختلف مطلوب لتنفيذ جلسة بدون كلمة مرور؟

226
2018-06-04 17:24


الأصل


هل تستخدم openssh؟ (إذا كان الأمر سهلاً ؛) - Rinzwind
@ Rinzwind ، لماذا أزعج الحصول على إصدار الملكية عندما يكون OpenSSH مثبتًا مسبقًا بالفعل؟ - Oxwivi
أحاول عدم القيام بالدعوى ؛) - Rinzwind
لاحظ أن هذا يعتبر ممارسة أمان ضعيفة ، وتقوم بعض التوزيعات بتعطيله خارج الصندوق. لست متأكدًا ، ولكن من الممكن أن تحتاج إلى تمكين PermitRootLogin في /etc/ssh/sshd_config من أجل جعل هذا العمل. - Kevin
@ كيفن ، يرجى توضيح نفسك. نحن نتحدث عن ssh-ing دون كلمة مرور ، وهو عموما ممارسة جيدة. هل تقصد ssh-ing في قذيفة الجذر؟ هذا لا يشمله هذا السؤال. - Oxwivi


الأجوبة:


إجابة

تنفيذ هذه الأوامر:

ssh-keygen

ثم ستحتاج إلى نسخ المفتاح الجديد إلى الخادم الخاص بك:

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

بعد نسخ المفتاح ، ssh في الجهاز كالمعتاد:

ssh user@host

يمكنك الآن تسجيل الدخول دون إدخال كلمة مرور من الجهاز المعين الذي نفذت فيه الأوامر.

مثال

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

تفسير

هذا يفترض أنه يمكنك بالفعل الاتصال بالخادم الخاص بك عبر SSH.

ستحتاج إلى إنشاء مفتاح SSH Keypair الذي سيسمح لك بالتعرف عليك على نفسك دون استخدام كلمة مرور. يمكنك اختيار حماية المفاتيح باستخدام رمز المرور إذا كنت ترغب في ذلك ، ولكن يمكن ترك هذا فارغًا مما يسمح بالوصول الكامل بدون كلمات مرور SSH.

  1. أولا إنشاء SSH Keypair عن طريق تشغيل ssh-keygen هذا سيخلق id_rsa و id_rsa.pub ملف. ال pub الملف هو ما يحدث على الخوادم ، المفتاح الخاص (id_rsa) هو ما يبقى معك وكيف تعرف نفسك.
  2. قم بنسخ المفتاح العام إلى الخادم الخاص بك باستخدام ssh-copy-id user@server استبدال المستخدم بالمستخدم البعيد والخادم الخاص بك باستخدام اسم DNS الخاص بالجهاز أو عنوان IP. سوف يطالبك بكلمة مرور SSH الخاصة بك ، وأدخلها ، وإذا اكتمل كل شيء بنجاح ، فستتمكن من الوصول إلى الجهاز عبر ssh user@server دون الحاجة إلى كلمة مرور.

المراجع


231
2018-06-04 17:36



Oxwivi هذه الإجابة هي الطريقة الأكثر صحة للقيام بذلك - ولكن يبدو أطول. كل ما عليك القيام به هو الكتابة ssh-keygen اتبع التعليمات التي تظهر على الشاشة ، ثم اكتب ssh-copy-id user@server استبدال المستخدم مع المستخدم البعيد والخادم مع الجهاز البعيد - Marco Ceppi♦
كان عندي هذا الخطأ "اعترف العميل بعدم التوقيع باستخدام المفتاح". في كل مرة عند محاولة تسجيل الدخول بعد اتباع هذا الإجراء. كان الحل هو تشغيل "> ssh-add" على الجهاز المحلي والآن يمكنني تسجيل الدخول إلى الجهاز البعيد كما هو متوقع. - jmbouffard
تجدر الإشارة إلى أنه إذا كنت بحاجة إلى استخدام منفذ مخصص لـserver ، فيجب إجراء ذلك من خلال: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
Rinzwind: هل هذا يعني أنه لا يمكنني من أي وقت مضى مصادقة من عميل / جهاز غير معروف إلى الخادم الخاص بي إذا قمت بتعطيل المصادقة passwd والسماح فقط بمصادقة المفاتيح. هل هناك أي طريقة للسماح بتسجيل الدخول من جهاز غير معروف باستخدام المفتاح الخاص الذي تم إنشاؤه للعميل المعروف / المكوّن للاتصال بالخادم؟ أعني ، هل هذا المفتاح الخاص محمول ويمكن استخدامه لمصادقة نفسي للخادم من الأجهزة الأخرى ، في حالة الاحتياجات الطارئة؟ - Rajat Gupta
لكن الخادم لا يزال يسأل عن كلمة المرور ،،، - lerner


اكتب الأوامر التالية:

  1. ssh-keygen 

    صحافة أدخل مفتاح حتى تحصل على المطالبة

  2. ssh-copy-id -i root@ip_address

    (سيطلب مرة واحدة كلمة المرور للنظام المضيف)

  3. ssh root@ip_address

الآن يجب أن تكون قادرًا على تسجيل الدخول بدون أي كلمة مرور.


30
2018-05-17 08:45





الطريقة التي أقوم بها عادةً هي كالتالي:

ssh-keygen -t rsa

(عندما يُطلب منك كلمة مرور ، اتركها فارغة)

ثم: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(يتطلب هذا المجلد .ssh أن يكون في الدليل الرئيسي على اسم المضيف المستهدف ، مع ملف authorized_keys فيه)

بالطبع ، استبدل اسم المستخدم باسم المستخدم المطلوب ، واسم المضيف مع اسم المضيف المطلوب أو عنوان IP المطلوب

بعد ذلك ، فقط SSH إلى ذلك الصندوق مثلما كنت معتادًا على ذلك.


21
2018-06-04 18:22



ماذا عن touch و chmod الأمر في إجابة رينزويند؟ - Oxwivi
سوف تحتاج إلى chmod .ssh/authorized_keys الملف إلى 0600 أو هذا لن ينجح - Marco Ceppi♦
هذا ساعد حقا لأنني لم أستطع الحصول على نسخة سه-معرف للعمل من أجل الجذر على خادم بلدي. يجب أن يكون الجذر في الحالة حيث يحتاج backuppc (أو أي خفي آخر) إلى ssh على جهاز آخر. - Adam


أنا استخدم عادة sshpass لذلك ، تثبيته مع sudo apt-get install sshpass واستخدامها هكذا

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



لماذا لا تستخدم مفاتيح ssh؟ - enzotib
انها ليست "لماذا لا" الوضع ، فإنه لا يزال يعمل الكمال دون إضافة مفاتيح ، مجرد طريقة أخرى أود أن أقول. - Bruno Pereira
شكرا للمعلومات على sshpass ، لم يسمع بها من قبل. - Panther
مفاتيح SSH هي الإجابة "الصحيحة" على السؤال ، ولكن sshpass هو اختراق مفيد جدًا في الحالات التي لا يمكنك فيها تغيير طريقة المصادقة على الخادم البعيد! - Jacob Krall
هذا أمر خطير للغاية ، ستظل في bash_history أو مهما كانت كلمات المرور العادية للمضيفين الذين تتصل بهم .. - kappa


هذا الحل هو على وجه التحديد للمستخدمين الذين يستخدمون شبابيك إلى سه إلى أجهزتهم البعيدة بما في ذلك الصور السحابية سحابة AWS و GCE Cloud


9
2017-11-20 09:07





تعطيل مصادقة كلمة المرور

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

إذا قمت بتعطيل مصادقة كلمة المرور ، فسيكون من الممكن فقط   الاتصال من أجهزة الكمبيوتر التي وافقت على وجه التحديد. هذا على نطاق واسع   يحسن أمانك ، لكنه يجعل من المستحيل بالنسبة لك الاتصال به   جهاز الكمبيوتر الخاص بك من جهاز كمبيوتر صديق دون الموافقة المسبقة على جهاز الكمبيوتر ، أو   من الكمبيوتر المحمول الخاص بك عندما تقوم بحذف المفتاح الخاص بك عن طريق الخطأ.

يوصى بتعطيل مصادقة كلمة المرور ما لم يكن لديك   سبب محدد لعدم.

لتعطيل مصادقة كلمة المرور ، ابحث عن السطر التالي في   ملف sshd_config الخاص بك:

#PasswordAuthentication yes

استبدله بخط يبدو كالتالي:

PasswordAuthentication no

بمجرد حفظ الملف وإعادة تشغيل خادم SSH الخاص بك ، أنت   لا ينبغي أن يطلب منك كلمة مرور عند تسجيل الدخول.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



هذا هو الجواب الصحيح الأساسي ولكنه جيد للأمن! أيضا تعطيل دخول الجذر هو واحد آخر جيد - FreeSoftwareServers
هل PasswordAuthentication no تؤثر على جميع المستخدمين؟ إذا لم يكن الأمر كذلك ، كيف أقوم بإيقاف تشغيله للمستخدمين العاديين ولكن أتركه بدون تغيير بالنسبة إلى الجذر أثناء اختباره؟ أنا لا أريد حقا أن foobar ذلك وقفل نفسي تماما. - Adam
إبقاء جلسة سه مفتوحة حتى تتمكن من تغييره مرة أخرى. تريد تعطيل كلمات المرور والجذر. نعم ، يمكنك ذلك. لا ؛) - Thufir
خلال ssh ، لدي خطأ Permission denied (publickey). مع PasswordAuthentication no. ماذا علي أن أفعل؟ هل أغير PasswordAuthentication noعلى مضيف آخر؟ - ParisaN


إذا قمت بإنشاء مفتاح مفاتيح عام / دقيق وقمت بتسجيل الدخول باستخدام المفتاح العام الذي تم إنشاؤه حديثًا ، فلن تحتاج إلى كتابة كلمة المرور الخاصة بك. اعتمادًا على تهيئة حلقة المفاتيح و / أو وكيل ssh ، قد تحتاج إلى حماية مفتاحك باستخدام عبارة مرور.

هنا واحد من العديد قصيرق لك. من الأهمية بمكان لسلامة هذه الطريقة ، أن المفتاح الخاص الذي تم إنشاؤه لا يزال خاصا! يجب عليك عدم مشاركته مع أي شخص مطلقًا أو السماح بالوصول إليه بأي صفة.

هذا الأمر يولد مفتاح قوي بشكل معقول في ~/.ssh/:

ssh-keygen -b 4096

في ~/.ssh/ ستجد المفتاح العام الخاص بك id_rsa.pub. يجب أن يتم إلحاق محتوياته بالخوادم الخاصة بك authorized_keys من خلال نقل الوسائط عبر وسائط النقل (محرك أقراص القلم) أو عن طريق تمكين مصادقة كلمة المرور على الخادم ، ثم استخدام ssh-copy-id ~/.ssh/id_rsa.pub username@server ثم تعطيلها مرة أخرى.

إذا اخترت تأمين مفتاحك باستخدام عبارة مرور (في الخطوة الأولى) ، يمكنك استخدامها ssh-agent أو مجموعة مفاتيح Ubuntu لتأمين تلك الحصة محليًا بحيث لا تضطر إلى كتابتها طوال الوقت.


4
2018-06-04 17:32





تسجيل الدخول عن بعد / نسخة دون إعطاء كلمة مرور

التطبيقات ssh و scp لتسجيل الدخول عن بعد والنسخ عن بعد ، على التوالي ، تسمح لك بالاتصال مع مضيف بعيد دون إعطاء كلمة مرور. يتطلب ذلك اتباع إجراء مصادقة مثل الإجراء الموضح أدناه. نقصد بالعميل الآلة التي تجلس عليها وعن طريق الخادم نعني الآلة التي تريد تسجيل الدخول إليها بدون إعطاء كلمة مرور. خطوات إجراء التوثيق هي:

  1. قم بتشغيل ssh-keygen لإنشاء مفاتيح خاصة وعامة ، ما لم يتم ذلك بالفعل على جهازك. يتم تخزين هذه في الملفات في $HOME/.ssh.
  2. إلحاق محتويات ملف المفتاح العام إلى الملف $HOME/.ssh/authorized_keys أو $HOME/.ssh/authorized_keys2 على الخادم.

هناك ثلاثة أنواع مختلفة من بروتوكولات المصادقة. يمكنك تحديد النوع عند تشغيل ssh-keygen:

  1. SSH بروتوكول الإصدار 1 ، RSA1: هذا هو الاختيار الافتراضي والنتائج في هوية الملفات (المفتاح الخاص ، يجب أن تأخذ chmod 0700 للتأكد من أن هذا الملف غير مقروء للآخرين) و identity.pub (المفتاح العمومي).
  2. SSH بروتوكول الإصدار 1 ، RSA: يتم الحصول على هذا عن طريق تشغيل ssh-keygen -t rsa والنتائج في الملفات id_rsa (مفتاح خاص) و id_rsa.pub (المفتاح العمومي)
  3. SSH بروتوكول الإصدار 1 ، DSA: يتم الحصول على هذا عن طريق تشغيل ssh-keygen -t dsa والنتائج في الملفات id_dsa (مفتاح خاص) و id_dsa.pub (المفتاح العمومي)

عند تشغيل ssh-keygen ، يمكنك الاعتماد على الإجابات الافتراضية (مما يعني أنك لا تعطي عبارة مرور). هذا يجعل الإعداد الكامل بسيطًا ، ولكنه أيضًا غير آمن.

يمكنك تحديد نوع المفاتيح ليتم استخدامها بواسطة خيار سه. ssh -1 استخدام قوات RSA1 مفاتيح (بروتوكول الإصدار 1) ، في حين ssh -2 القوات سه لكي يحاول RSA أو DSA مفاتيح فقط (بروتوكول الإصدار 2). في الأمثلة أدناه ، نقوم بتوليد وتثبيت RSA1 و DSA مفاتيح على المضيف البعيد بحيث يكون لديك المزيد من المرونة. يمكنك ان تجعل ملف التكوين في بلدكم .ssh الدليل مع الخط

Protocol 1,2

هذا يجعل سه جرب RSA1 (بروتوكول الإصدار 1) الاتصال من قبل RSA / DSA (بروتوكول الإصدار 2).

باستخدام مفاتيح RSA1

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

باستخدام مفاتيح DSA

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

هذا هو كل ما عليك فعله إذا لم تستخدم عبارة مرور عند إنشاء المفاتيح. يمكنك اختبار الاتصال عن طريق تشغيل $ ssh عن بعد ومعرفة ما إذا كان يمكنك تسجيل الدخول دون إعطاء كلمة مرور (قد تحتاج إلى استخدام -1 أو -2 كخيارات ل سه). يمكن بالطبع تكرار الإجراء لأي جهاز تريد تسجيل الدخول إليه.

إذا استخدمت عبارة مرور ، فسيتعين عليك تشغيل البرنامج ssh-agent لبدء قذيفة خاصة ، تليها ssh-add لتسجيل الخاص بك مفتاح / عبارة المرور مع تركيبة sshd. انظر صفحات الرجل لهذه البرامج لمزيد من المعلومات.

برنامج نصي لأتمتة اتصالات خالية من كلمة المرور: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

نسخ من: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27





لجعل بعض الإضافات:

  • ماك افتراضيا لا يملك ssh-copy-id، سيكون عليك تثبيته بنفسك:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

العثور على المزيد هنا: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • إذا قمت بإجراء إعادة توجيه منفذ ، فيجب أن يكون الأمر على النحو التالي:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

لاحظ أن علامات الاقتباس ضرورية.


2
2017-09-14 12:14





أود إضافة إجابة لأولئك الذين قد يجدون أنه يجب عليهم إدخال كلمة المرور حتى إذا قرأوا جميع الإجابات هنا لأنك قمت بتعيين IdentityOnly على أنها نعم. والجواب هنا يمكن أن يوفر لك الكثير من الوقت لإدارة مفاتيح متعددة ، كونها مفاتيح git أو الخادم.

بعد أن قمت بإنشاء المفتاح وقمت بنسخه إلى الخادم:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

وجدت أنها لم تنجح.

ثم ذهبت للتحقق من ~/.ssh/config الملف ، رأيت هذا في الأسفل:

Host *
IdentitiesOnly yes

ثم أضيف هذا أعلاه:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

يمكنني فقط تسجيل الدخول عن طريق الدخول ssh somename.

ثم يمكنك إضافة مفاتيح ssh متعددة باستخدام الأسماء المفضلة لديك ، وتحتاج فقط إلى إضافة الإعدادات مثل الأسطر الأربعة المذكورة أعلاه إلى ملف التكوين.

المضيف هو الاسم الذي ترغب في إدخاله عند توصيل الخادم لاحقًا. اسم المضيف هو IP الخاص بالخادم ؛ المستخدم هو اسم المستخدم الذي تقوم بتسجيل الدخول إليه. و identityfile هو الملف الذي تخزن فيه المفتاح الذي أنشأته.


1
2018-01-24 09:08