ফাইল নাম দ্বারা ssh- এজেন্ট থেকে পরিচয় চয়ন করুন


9

সমস্যা: আমার কিছু 20-30 ssh-agentপরিচয় রয়েছে। বেশিরভাগ সার্ভারগুলি এতে প্রমাণীকরণ অস্বীকার করে Too many failed authentications, কারণ এসএসএইচ সাধারণত আমাকে লগ ইন করতে 20 টি ভিন্ন কী চেষ্টা করতে দেয় না।

এই মুহুর্তে, আমি প্রতিটি হোস্টের জন্য ম্যানুয়ালি, IdentityFileএবং IdentitiesOnlyনির্দেশটি ব্যবহার করে পরিচয় ফাইলটি উল্লেখ করছি , যাতে এসএসএইচ কেবল একটি কী ফাইল চেষ্টা করবে, যা কাজ করে।

দুর্ভাগ্যক্রমে, মূল কীগুলি আর উপলভ্য না হওয়ায় এটি কাজ করা বন্ধ করে দেয়। ssh-add -lআমাকে প্রতিটি কী ফাইলের জন্য সঠিক পাথগুলি দেখায় এবং সেগুলি রাস্তাগুলির সাথে মেলে .ssh/configতবে এটি কার্যকর হয় না। স্পষ্টতই, এসএসএচ ফাইলের নাম দ্বারা নয়, পাবলিক কী স্বাক্ষর দ্বারা ইন্ডেন্টিটি নির্বাচন করে, যার অর্থ আসল ফাইলগুলি উপলব্ধ থাকতে হবে যাতে এসএসএইচ পাবলিক কীটি বের করতে পারে।

এটির সাথে দুটি সমস্যা রয়েছে:

  • আমি কীগুলি ধরে থাকা ফ্ল্যাশ ড্রাইভটি প্লাগ লাগানোর সাথে সাথে এটি কাজ করা বন্ধ করে দেয়
  • মূল ফাইলগুলি দূরবর্তী হোস্টে উপলব্ধ না হওয়ায় এটি এজেন্ট ফরোয়ার্ডিংকে অকেজো রেন্ডার করে

অবশ্যই, আমি আমার পরিচয় ফাইলগুলি থেকে সর্বজনীন কীগুলি বের করতে এবং এগুলি আমার কম্পিউটারে সঞ্চয় করতে এবং প্রতিটি দূরবর্তী কম্পিউটারে আমি সাধারণত লগইন করতে পারি। যদিও এটি কোনও পছন্দসই সমাধানের মতো দেখায় না।

আমার যা প্রয়োজন তা হ'ল ফাইলের নাম দ্বারা এসএসএইচ-এজেন্ট থেকে একটি পরিচয় নির্বাচন করার সম্ভাবনা, যাতে আমি সহজেই ব্যবহার করে .ssh/configবা পাস দিয়ে সঠিক কীটি নির্বাচন করতে পারি -i /path/to/original/key, এমনকি আমি যে দূরবর্তী হোস্টে এসএসএইচ করতে চাইছি তাও। এটি আরও ভাল হবে যদি আমি কীগুলি "ডাকনাম" করতে পারতাম যাতে আমাকে এমনকি পুরো পথটি নির্দিষ্ট করতে না হয়।


1
আপনার অনেক ssh পরিচয় প্রয়োজন কেন? যদি আপনার সমস্ত অ্যাকাউন্টগুলিতে অ্যাক্সেস দেওয়ার জন্য কোনও আপোষযুক্ত ব্যক্তিগত কী এড়াতে হয় তবে আপনি কেন সেগুলি সমস্তই একটি ফ্ল্যাশ ড্রাইভে রেখেছেন? একাধিক এসএসআই পরিচয় পরিচালনার সাথে সম্পর্কিত সমস্যাগুলির কথা আমি শুনি না তবে তাদের কেন প্রয়োজন তা জিজ্ঞাসা করার সুযোগ পাইনি।
দিমিত্রি চুবারভ

কখনও বলেনি যে এগুলি সবই একটি ফ্ল্যাশ ড্রাইভে রয়েছে।
লিওলুক

3
@ দিমিত্রিচুবরভ একাধিক এসএসআই সনাক্তকরণের জন্য একটি সম্ভাব্য অ্যাপ্লিকেশন হ'ল একটি authorized_keysফাইল যা ব্যবহৃত কী-র উপর নির্ভর করে সরাসরি শেল অ্যাক্সেসের অনুমতি না দিয়ে বিভিন্ন কমান্ড কার্যকর করে।
টোবিয়াস কেইনজলার

উত্তর:


8

অনুমান করুন আমাকে নিজের প্রশ্নের উত্তর দিতে হবে, কারণ ফাইলের নামে পরিচয়ের অনুরোধ করার কোনও উপায় নেই বলে মনে হচ্ছে।

আমি একটি দ্রুত এবং নোংরা পাইথন স্ক্রিপ্ট লিখেছিলাম যা .ssh/fingerprintsএজেন্টের হাতে থাকা প্রতিটি কীগুলির জন্য একটি সর্বজনীন কী ফাইল তৈরি করে। আমি তখন এই ফাইলটি নির্দিষ্ট করতে পারি, যার কোনও গোপন কী নেই, ব্যবহার করে IdentityFileএবং এসএসএইচ এসএসএচ এজেন্টের কাছ থেকে সঠিক পরিচয়টি বেছে নেবে। পুরোপুরি সূক্ষ্মভাবে কাজ করে, এবং আমার যতটা বেসরকারী চাবি এজেন্ট ব্যবহার করতে দেয়।

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Dumps all public keys held by ssh-agent and stores them in ~/.ssh/fingerprints/, so that
they can be identified using the IdentityFile directive.

"""

import sys, os
import stat
import re
import envoy

RE_MATCH_FILENAME = re.compile(r'([^\\/:*?"<>|\r\n]+)\.\w{2,}$', re.IGNORECASE)

if os.getuid() == 0:
    USERNAME = os.environ['SUDO_USER']
else:
    USERNAME = os.environ['USER']

def error(message):
    print "Error:", message
    sys.exit(1)

def main():
    keylist = envoy.run('ssh-add -L').std_out.strip('\n').split('\n')

    if len(keylist) < 1:
        error("SSH-Agent holds no indentities")

    for key in keylist:
        crypto, ckey, name = key.split(' ')
        filename = os.path.join(os.environ['HOME'], '.ssh/fingerprints',
                  RE_MATCH_FILENAME.search(name).group(1)+'.pub')

        with open(filename, 'w') as f:
            print "Writing %s ..." % filename
            f.write(key)

        envoy.run('chmod 600 %s' % filename)
        envoy.run('chown %s %s' % (USERNAME, filename))


if __name__ == '__main__':
    main()

ভাল কাজ, আমি শীঘ্রই এটি চেষ্টা করব
টোবিয়াস কেইনজলার

3

চালান

ssh-add -L | gawk ' { print $2 > $3 ".pub" } '

রিমোট মেশিনে সমস্ত পাবলিক কী ফাইলগুলি স্বয়ংক্রিয়ভাবে জেনারেট করে (আপনার পাবলিক কীগুলির .ssh/configনাম ধরে নেওয়া হয়েছে privateKeyFileName.pubএবং কোনও অসংগতিযুক্ত পাথ জড়িত নেই ধরে নিবেন)। chown $USER .ssh/*আপনার sudoমামলার জন্য ফোন করুন ।


1

গৃহীত সমাধান থেকে বাছাই করা এবং ধরে নেওয়া যে আপনি প্রাথমিক সার্ভারটিতে অ্যাক্সেস পেতে ব্যবহৃত পরিচয়টি পুনরায় ব্যবহার করতে চান, তবে এরকম কিছু:

Host github.com
    IdentitiesOnly yes
    IdentityFile ~/.ssh/authorized_keys

যথেষ্ট হয়।


এটি আমার পক্ষে কাজ করে না যখন পরিচয় ফাইলটিতে কেবল একটি পাবলিক কী থাকে - এটি কাজ করে তবে একাধিক না হলে হয়।
ygrek
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.