ফ্যাব্রিক ব্যবহার করার সময় host / .ssh / config এ তালিকাবদ্ধ হোস্টের সাথে সংযোগ স্থাপন Connect


83

আমার Fabricযে হোস্ট রয়েছে তা না চিনতে আমার সমস্যা হচ্ছে ~/.ssh/config

আমার fabfile.pyনিম্নরূপ:

from fabric.api import run, env

env.hosts = ['lulu']

def whoami():
    run('whoami')

চলমান $ fab whoamiদেয়:

[লুলু] চালান: হোয়ামি

মারাত্মক ত্রুটি: লুলুর জন্য নাম অনুসন্ধান ব্যর্থ

নামটি luluআমার মধ্যে রয়েছে ~/.ssh/config, এর মতো:

Host lulu
     hostname 192.168.100.100
     port 2100
     IdentityFile ~/.ssh/lulu-key

সমাধানে ভালো কিছু যোগ করা হয় আমার প্রথম চিন্তা lulu.luluকরতে /etc/hosts(আমি একটি ম্যাক করছি), কিন্তু তারপর আমি তারেক শনাক্ত ফাইলে পাস করতে হবে - এবং আমি বরং আমার প্রমাণীকরণ (অর্থাত রাখা চাই ~/.ssh/config) আমার স্থাপনার থেকে আলাদা ( ie fabfile.py)।

পাশাপাশি, ঘটনাক্রমে, আপনি হোস্ট ফাইলে কোনও হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করলে, fabric.contrib.projects.rsync_project'পোর্টগুলি' তে স্বীকৃতি বলে মনে হচ্ছে না hosts.env(অর্থাত আপনি যদি hosts.env = [lulu:2100]কোনও কল ব্যবহার করেন যা rsync_projectসংযোগের চেষ্টা করে বলে মনে হচ্ছে lulu:21)।

ফ্যাব্রিক এই luluনামটি স্বীকৃতি না দেওয়ার কোন কারণ আছে ?

উত্তর:


145

সংস্করণ 1.4.0 থেকে, ফ্যাব্রিক আপনার ssh কনফিগারেশন ব্যবহার করে (আংশিকভাবে)। তবে আপনাকে এটিকে স্পষ্টভাবে সক্ষম করতে হবে need

env.use_ssh_config = True

আপনার ফেবিলের শীর্ষের কাছাকাছি কোথাও। একবার আপনি এটি করেন, ফ্যাব্রিক আপনার ssh কনফিগারেশন পড়তে হবে ( ~/.ssh/configডিফল্ট থেকে, বা থেকে env.ssh_config_path)।

একটি সতর্কতা: আপনি যদি 1.5.4 এর চেয়ে বেশি পুরানো সংস্করণ ব্যবহার করেন env.use_ssh_configতবে সেট করা থাকলে একটি गर्भपात ঘটবে তবে সেখানে কোনও কনফিগার ফাইল উপস্থিত নেই। সেক্ষেত্রে আপনি এই জাতীয় কাজের মতো ব্যবহার করতে পারেন:

if env.ssh_config_path and os.path.isfile(os.path.expanduser(env.ssh_config_path)):
    env.use_ssh_config = True

উত্তরটি মূলত "গ্রহণযোগ্য উত্তর পুরানো" দিয়ে শুরু হয়েছিল [যেহেতু এটি প্রাক-1.4.0 আচরণের নথিভুক্ত করেছে]। আমি এই উপস্থাপনাটি সরিয়েছি, যেহেতু আমার উত্তর পরিবর্তে গৃহীত হয়েছিল;) ধন্যবাদ!
আরবিপি

9

মনে রাখবেন যে নামটি না থাকলেও এটি ঘটে /etc/hosts। আমার একই সমস্যা ছিল এবং সেই ফাইল এবং এবং উভয়ই হোস্টের নাম যুক্ত করতে হয়েছিল ~/.ssh/config


5

আপডেট : এই উত্তরটি এখন পুরানো


ফ্যাস্রিকের কাছে বর্তমানে .ssh / কনফিগারেশন ফাইলটির জন্য সমর্থন নেই। আপনি ক্লিনকে কল করতে কোনও ফাংশনে এগুলি সেট আপ করতে পারেন, উদাহরণস্বরূপ: ফ্যাব প্রোডাকশন টাস্ক; যেখানে উত্পাদন ব্যবহারকারী নাম, হোস্টনাম, পোর্ট এবং ssh পরিচয় সেট করে।

আরএসসিএনসি প্রকল্পের ক্ষেত্রে, এখন পোর্ট সেটিংয়ের ক্ষমতা থাকা উচিত, যদি না হয় তবে আপনি সর্বদা লোকাল ("আরএসসিএন ...") চালাতে পারেন যেহেতু মূলত সেই অবদান ফাংশনটিই তাই করে।


4
প্রাইভেট কী-এর পুরো পথে এনভ্যু.কি_ফিলনাম সেট করুন। এছাড়াও যদি আপনি সমস্যার মুখোমুখি হন তবে এ সম্পর্কিত কয়েকটি সমস্যার জন্য কোড. fabfile.org/issues/show/265 দেখুন ।
tobych

4
হ্যাঁ, এটি এখন সমর্থন পেয়েছে। (যদিও আমি মন্তব্য করার আগে এটি পূর্বের 1.0 ছিল) পরবর্তী পাঠকদের জন্য উল্লেখ করা।
মরগান

4

কনফিগারটি পড়ার জন্য কেউ নিম্নলিখিত কোড ব্যবহার করতে পারেন (মূল কোডটি: http://markpasc.typepad.com/blog/2010/04/loading-ssh-config-settings-for-fabric.html থেকে নেওয়া ):

from fabric.api import *
env.hosts = ['servername']

def _annotate_hosts_with_ssh_config_info():
    from os.path import expanduser
    from paramiko.config import SSHConfig

    def hostinfo(host, config):
        hive = config.lookup(host)
        if 'hostname' in hive:
            host = hive['hostname']
        if 'user' in hive:
            host = '%s@%s' % (hive['user'], host)
        if 'port' in hive:
            host = '%s:%s' % (host, hive['port'])
        return host

    try:
        config_file = file(expanduser('~/.ssh/config'))
    except IOError:
        pass
    else:
        config = SSHConfig()
        config.parse(config_file)
        keys = [config.lookup(host).get('identityfile', None)
            for host in env.hosts]
        env.key_filename = [expanduser(key) for key in keys if key is not None]
        env.hosts = [hostinfo(host, config) for host in env.hosts]

        for role, rolehosts in env.roledefs.items():
            env.roledefs[role] = [hostinfo(host, config) for host in rolehosts]

_annotate_hosts_with_ssh_config_info()

4
ফ্যাব্রিক sshparamikotry: \n from ssh.config import SSHConfig \n except ImportError: \n from paramiko.config import SSHConfig
1.2+

এসএসএইচ পাঠাগারটি আবার প্যারামিকোতে একত্রীকরণ করা হয়েছে, যেমনfrom paramiko.config import SSHConfig
n8henrie
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.