سؤال كيف أقوم بتهيئة SSH بحيث لا نجرب جميع ملفات الهوية تلقائيًا؟


لقد تم وضع ملفي ssh الخاصة بي داخل my ~ / .ssh / folder. ربما لدي حوالي 30 ملفًا هناك.

عندما أقوم بالاتصال بالخوادم ، سأقوم بتحديد ملف الهوية الذي سيتم استخدامه ، مع شيء مثل

ssh -i ~ / .ssh / client1-identity client1@10.1.1.10

ومع ذلك ، إذا لم أقم بتحديد ملف هوية ، وما عليك سوى استخدام شيء مثل هذا:

ssh user123@example.com

أحصل على الخطأ

فشل المصادقة كثيرة جدًا لـ user123

أتفهم ذلك لأنه إذا لم يتم تحديد ملف هوية ، ويمكن أن تجد ssh ملفات هوية ، فستحاول كل ذلك.

أنا أفهم أيضا أنه يمكنني تحرير ~/.ssh/config الملف وتحديد شيء مثل:

استضافة example.com
PreferredAuthentications لوحة المفاتيح التفاعلية ، كلمة المرور

لمنع هذا الاتصال من محاولة ملفات الهوية المعروفة.

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


85
2018-04-09 17:01


الأصل


إعادة "أنا أفهم هذا لأنه ..." - استخدام ssh -v لمعرفة بالتأكيد. - grawity


الأجوبة:


يمكنك استعمال ال IdentitiesOnly=yes الخيار مع IdentityFile (نرى ssh_config الصفحة الرجل). بهذه الطريقة ، يمكنك تحديد الملف (الملفات) الذي يجب أن تبحث عنه.

في هذا المثال ، سوف ssh فقط ابحث في الهويات المعطاة في ملفات ssh_config + الملفات الأربعة المدرجة في سطر الأوامر (سيتم تجاهل الهويات المقدمة بواسطة الوكيل):

ssh -o IdentitiesOnly=yes \
    -o IdentityFile=id1.key \
    -o IdentityFile=id2.key \
    -i id3.key \
    -i id4.key \
    user123@example.com

الاستمارات -i و -o IdentityFile= قابلة للتبادل.


78
2018-04-09 17:11



ل مثال سيكون جميلا - rubo77
أليس كذلك: IdentitiesOnly yes (بدون "=")؟ - Dimitrios Mistriotis
DimitriosMistriotis وفقا لصفحة الرجل ssh_config ، إما مقبول: Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option. - Nick Anderegg
ردًا علىNickAnderegg - Dimitrios Mistriotis


إجابة قصيرة user76528 هو الصحيح ، ولكن أنا فقط كان هذه المشكلة ، ويعتقد بعض التفصيل سيكون مفيدا. قد تهتم أيضًا بهذا الحل إذا تساءلت "لماذا يتجاهل ssh خيار تهيئة ملف التخصيص"؟

أولا ، على عكس كل خيار آخر في ssh_config ، لا يستخدم ssh الأول IdentityFile أن يجدها. بدلا من ذلك IdentityFile الخيار يضيف هذا الملف إلى قائمة الهويات المستخدمة. يمكنك تكديس متعددة IdentityFile خيارات ، وسيحاول عميل ssh كل منهم حتى يقبل الخادم واحد أو يرفض الاتصال.

ثانياً ، إذا كنت تستخدم ssh-agent ، فسوف يحاول ssh تلقائياً استخدام المفاتيح الموجودة في البرنامج ، حتى إذا لم تكن قد حددتها باستخدام الخيار IdentityFile (أو - i) ssh_config. هذا هو السبب الشائع الذي قد تحصل عليه Too many authentication failures for user خطأ. باستخدام IdentitiesOnly yes الخيار سيتم تعطيل هذا السلوك.

إذا كنت ssh كمستخدمين متعددين لأنظمة متعددة ، فإنني أوصي وضع IdentitiesOnly yes في قسمك العالمي من ssh_config ، ووضع كل منها IdentityFile ضمن الأقسام الفرعية المضيفة المناسبة.


74
2018-06-12 22:46



وأوضح جيد ، شكرا لك. ليس من الواضح أن هذه المعلمة "IdentitiesOnly" تعني TakeOnlyWhatIExplicitlySpecifyThenFailoverToPassword. وعلى ما يبدو ، لا يزال يتم سرد مفتاح ./ssh/id_rsa. - lImbus
وضع IdentitiesOnly yes في القسم العالمي من ssh_config هو ما فعله لي. شكر! - jamix
شكرا لك على التعليق المفصل. اعتدت على استخدام ("\" للخط الجديد) Host * \ IdentityFile ~/.ssh/mykeyكخيار تكوين ، وفي البداية بدا من الغريب أن يكون هناك إدخال مختلف لموقع معين ، على سبيل المثال ، Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes استمر في العرض mykey بدلا من specialkey. كان من غير الواضح بالتأكيد ، حتى أدركت (من إجابتك) أن إدخالات IdentityFile مكدسة في ترتيب التقييم وسيتم استخدام آخر تعريف. إزالة IdentityFile ~/.ssh/mykey حل المشكلة ، وتم استخدام المفتاح المفرد الصحيح. - Ryder
قبل أن أحاول هذا ، لاحظت بلدي git pull/push كانت الأوامر تحاول كل هوية واحدة محملة في وكيل أعمالي. لم تكن مشكلة حتى في وقت من الأوقات كان لدي الكثير من المفاتيح. - sdkks


أنا عموما أفعل ذلك مثل:

$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa root@server.mydom.com

الخيارات هي كما يلي:

  • -o IdentitiesOnly=yes - يخبر SSH أن يستخدم فقط المفاتيح التي يتم تقديمها عبر واجهة سطر الأوامر وليس أي من $HOME/.ssh أو عن طريق ssh-agent
  • -F /dev/null - يعطل استخدام $HOME/.ssh/config
  • -i ~/path/to/some_id_rsa - المفتاح الذي تريد استخدامه صراحة للاتصال

مثال

$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa root@someserver.mydom.com
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
Last login: Tue Dec  8 19:03:24 2015 from 153.65.219.15
someserver$

لاحظ في الناتج أعلاه ذلك ssh حددت فقط my_id_rsa المفتاح الخاص عبر CLI وأنها تستخدمه للاتصال someserver.

على وجه التحديد هذه المقاطع:

debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1

و:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

15
2017-12-09 00:18



شكرا ، هذا هو الحل الكامل الوحيد. على ما يبدو، -F /dev/null هي القطعة المفقودة في الإجابات الأخرى. - leden


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

لاستخدام مصادقة كلمة المرور فقط وعدم استخدام المفتاح العام وعدم استخدام "لوحة المفاتيح التفاعلية" المضللة إلى حد ما (وهي عبارة عن مجموعة شاملة تتضمن كلمة المرور) ، يمكنك إجراء ذلك من سطر الأوامر:

ssh -o PreferredAuthentications=password user@example.com

9
2018-06-19 14:19





استخدم IdentityFile ولكن استمر في استخدام ssh-agent لتجنب Reprompts Passphrase

الحل المقبول من استخدام IdentitiesOnly yes يعني أنك لن تكون قادرًا على الاستفادة من وكيل ssh ، مما ينتج عنه مطالبات متكررة لشفرة المرور عند تحميل مفتاحك.

لمواصلة استخدام ssh-agent وتجنب أخطاء "فشل الكثير من المصادقة" ، جرِّب ما يلي:

  1. قم بإزالة أية برامج نصية لبدء تشغيل وحدة التحكم التفاعلية التي تقوم تلقائيًا بتحميل المفاتيح ssh-agent.

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

  3. استعمال ssh-add -D عندما تحصل على أخطاء "مصادقة أكثر من اللازم". هذا ببساطة "إعادة تعيين" (يحذف) ذاكرة التخزين المؤقت الخاصة بك وكيل ssh. ثم حاول الاتصال مرة أخرى داخل نفس الجلسة. ستتم مطالبتك بعبارة المرور ، وبمجرد قبولها ، ستتم إضافتها إلى وكيلك. نظرًا لأن لديك مفتاحًا واحدًا فقط في وكيلك ، فسيتم السماح لك بالاتصال. ثم ssh-agent لا يزال هناك للاتصالات المستقبلية خلال نفس الدورة لتجنب reprompts.

    Host ex example.com
       User joe
       HostName example.com
       PreferredAuthentications publickey,password
       IdentityFile /path/to/id_rsa
       AddKeysToAgent yes
    

4
2017-09-01 20:10



هل ستقبل المفاتيح إلى keychain؟ - vfclists


يتواصل عميل ssh و ssh-agent من خلال مأخذ نطاق يونكس الذي تم تحديد اسمه إلى العميل من خلال متغير بيئة SSH_AUTH_SOCK (تم تحديده بواسطة الوسيط عند بدء التشغيل).

وبالتالي ، لمنع استدعاء واحد من العميل من الاستعلام عن عامل يمكن تعيين هذا المتغير صراحة لشيء غير صالح ، مثل سلسلة فارغة.

$ SSH_AUTH_SOCK= ssh user@server

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

debug1: pubkey_prepare: ssh_get_authentication_socket: Connection refused

1
2018-06-02 17:57





كان لديك الجواب طوال الوقت (تقريبًا):

Host *
PreferredAuthentications keyboard-interactive,password

عملت بالنسبة لي.


0
2017-08-14 22:57



طرح السؤال حول كيفية تحديد المفاتيح العامة التي يتم استخدامها. هذه الإجابة تعطل مصادقة المفتاح العام تمامًا. - chrishiestand
أجريت 1+ بسبب أنها كانت الإجابة التي كنت أتوجه إليها من خلال googling ، شكرًاHenry Grebler - matiu