ফ্যাব্রিকের সাথে একটি এসএসএইচ কীফাইল ব্যবহার করা


100

আপনি কীভাবে এসএসএইচ কীফিলগুলি ব্যবহার করে দূরবর্তী হোস্টগুলির সাথে সংযোগ স্থাপনের জন্য ফ্যাব্রিকটি কনফিগার করবেন (উদাহরণস্বরূপ, অ্যামাজন ইসি 2 উদাহরণগুলি)?

উত্তর:


69

এখানে উল্লেখ করার মতো বিষয় যে আপনি এর জন্য কমান্ড লাইন আরোগগুলি ব্যবহার করতে পারেন:

fab command -i /path/to/key.pem [-H [user@]host[:port]]

150

কোনও কারণে এসএসএইচ কীফাইল ব্যবহারের কার্যকর উদাহরণ সহ একটি সাধারণ ফ্যাবফিল সন্ধান করা সহজ নয়। আমি এটি সম্পর্কে একটি ব্লগ পোস্ট লিখেছি ( একটি ম্যাচের টুকরো সহ )।

মূলত, ব্যবহারটি এরকম কিছু হয়:

from fabric.api import *

env.hosts = ['host.name.com']
env.user = 'user'
env.key_filename = '/path/to/keyfile.pem'

def local_uname():
    local('uname -a')

def remote_uname():
    run('uname -a')

গুরুত্বপূর্ণ অংশটি env.key_filenameপরিবেশের পরিবর্তনশীল সেট করা হচ্ছে , যাতে সংযোগ করার সময় প্যারামিকো কনফিগারেশনটি এটির সন্ধান করতে পারে।


4
অনুশীলনে এটি আরও ভাল উত্তর।
— পাঁচচিকর

3
env.key_filename সংযোগের জন্য একাধিক কীফিল চেষ্টা করার জন্য স্ট্রিংগুলির একটি তালিকা থাকতে পারে ।
— কার্ল জি

আমি ব্যবহার আমার কাজগুলো এক প্রোগ্রামেটিক্যালি কী অস্ত যাবার settingsপ্রেক্ষাপটে ম্যানেজার, এবং যতক্ষণ না আমি পরিবর্তন এটা key_filename চিনতে পাই নি key_filename='/path/to/key'করার key_filename=['/path/to/key']তাই অন্য কেউ কষ্ট হচ্ছে না, তাহলে key_filename কী একটি তালিকা তৈরীর এটা ঠিক হতে পারে। এটি কল্পিত 1.10.1 এবং প্যারামিকো 1.15.2
— জয়মন 5'15

2
@ আসিম হেগশেটি, এটি সর্বশেষ ফ্যাব্রিক ২-এ সরানো হয়েছে was এই উত্তরটি 1
— ফেব্রিকের

1
আমি আমদানির পরিবর্তে সুস্পষ্ট আমদানি পছন্দ করতাম *
— এমটি

64

ফ্যাব্রিক 1.4 হিসাবে উপলব্ধ অন্য একটি দুর্দান্ত বৈশিষ্ট্য - ফ্যাব্রিক এখন এসএসএইচ কনফিগারেশন সমর্থন করে ।

আপনার ~/.ssh/configফাইলটিতে যদি ইতিমধ্যে সমস্ত এসএসএইচ সংযোগের প্যারামিটার থাকে তবে ফ্যাব্রিক এটিকে স্থানীয়ভাবে সমর্থন করবে, আপনাকে যা করতে হবে তা হ'ল:

env.use_ssh_config = True

আপনার ফেবিলের শুরুতে।


2
খুব দরকারী! আপনি যদি এর মতো ত্রুটিগুলি চালিয়ে যান IOError: [Errno 2] No such file or directory: ' /path/to/.ssh/key'বা Login password for ' root':কেবল নিশ্চিত হন যে আপনার কোনও সাদা জায়গা নেই .ssh/config। এটি এর User=rootপরিবর্তে উদাহরণস্বরূপ User = root...
— ডেনিস

@ অ্যাডনিস এটি এখনও মনে হয় ২০১ in সালে একটি বিষয় ..! ধন্যবাদ!
— gabn88

17

জন্য fabric2 fabfile ব্যবহার নিম্নলিখিত মধ্যে:

from fabric import task, Connection

@task
def staging(ctx):
    ctx.name = 'staging'
    ctx.user = 'ubuntu'
    ctx.host = '192.1.1.1'
    ctx.connect_kwargs.key_filename = os.environ['ENV_VAR_POINTS_TO_PRIVATE_KEY_PATH']

@task
def do_something_remote(ctx):
    with Connection(ctx.host, ctx.user, connect_kwargs=ctx.connect_kwargs) as conn:
        conn.sudo('supervisorctl status')

এবং এটি দিয়ে চালান:

fab staging do_something_remote

আপডেট:
একাধিক হোস্টের জন্য (এক হোস্ট এছাড়াও এটি করবে) আপনি এটি ব্যবহার করতে পারেন:

from fabric2 import task, SerialGroup

@task
def staging(ctx):
    conns = SerialGroup(
        'user@10.0.0.1',
        'user@10.0.0.2',
        connect_kwargs=
        {
            'key_filename': os.environ['PRIVATE_KEY_TO_HOST']
        })
    ctx.CONNS = conns
    ctx.APP_SERVICE_NAME = 'google'

@task
def stop(ctx):
    for conn in ctx.CONNS:
        conn.sudo('supervisorctl stop ' + ctx.APP_SERVICE_NAME)

এবং এটি কড়া বা ফেব 2 দিয়ে চালান:

fab staging stop

1
এটি ফ্যাব্রিক ২.x করার সঠিক উপায়, যেহেতু অন্যান্য সমস্ত উত্তরগুলি কাজ করবে না।
— বিবেক আদিত্য

এই stagingকাজে একাধিক হোস্টকে কীভাবে সহায়তা করবেন ?
— ব্ল্যাক_ রাইডার

1
@ ব্ল্যাক_রিডার, আমার উত্তরে এটি যুক্ত করেছেন
— মাইকেএল

15

আমার জন্য, নিম্নলিখিতগুলি কাজ করে না:

env.user=["ubuntu"]
env.key_filename=['keyfile.pem']
env.hosts=["xxx-xx-xxx-xxx.ap-southeast-1.compute.amazonaws.com"]

অথবা

fab command -i /path/to/key.pem [-H [user@]host[:port]]

তবে, নিম্নলিখিতগুলি করেছেন:

env.key_filename=['keyfile.pem']
env.hosts=["ubuntu@xxx-xx-xxx-xxx-southeast-1.compute.amazonaws.com"]

অথবা

env.key_filename=['keyfileq.pem']
env.host_string="ubuntu@xxx-xx-xxx-xxx.ap-southeast-1.compute.amazonaws.com"

3
আপনি যদি এর env.user="ubuntu"পরিবর্তে ব্যবহার করেন তবে আপনার প্রথম উদাহরণটি আমার পক্ষে কাজ করে env.user=["ubuntu"]।
— টেলর এডমিস্টন

7

আমাকে আজই এটি করতে হয়েছিল, আমার .py ফাইলটি যথাসম্ভব সহজ ছিল, @ ইউভালআডামের উত্তরে পোস্ট করা ফাইলের মতো তবে এখনও আমি পাসওয়ার্ডের জন্য অনুরোধ জানাতে থাকি ...

এ খুঁজছি paramikoলগ (জন্য SSH ফ্যাব্রিক দ্বারা ব্যবহৃত লাইব্রেরি), আমি লাইনে পাওয়া যায়নি:

বেমানান এসএস পিয়ার (কোনও গ্রহণযোগ্য কেক্স অ্যালগোরিদম নেই)

আমি এর সাথে আপডেট paramikoকরেছি:

sudo pip install paramiko --upgrade

এবং এখন এটি কাজ করে।


1

উপরে উল্লিখিত হিসাবে, ফ্যাব্রিক একটি ফ্যাশন পরে .ssh / কনফিগারেশন ফাইল সেটিংস সমর্থন করবে, কিন্তু ec2 এর জন্য একটি পেম ফাইল ব্যবহার করা সমস্যাযুক্ত বলে মনে হচ্ছে। IW একটি সঠিকভাবে সেটআপ .ssh / কনফিগারেশন ফাইল কমান্ড লাইন থেকে 'ssh সার্ভারনেম' এর মাধ্যমে কাজ করবে এবং env.host = ['সার্ভারনেম'] এ 'ফাব সামিটাস্ক' নিয়ে কাজ করতে ব্যর্থ হবে।

এটি আমার ফ্যাবফিল.পি-তে env.key_filename = 'keyfile' নির্দিষ্ট করে এবং আমার .ssh / কনফিগারেশনে ইতিমধ্যে IdentityFile এন্ট্রিটি নকল করে কাটিয়ে উঠেছে।

এটি ফ্যাব্রিক বা প্যারামিকো হতে পারে, যা আমার ক্ষেত্রে ফ্যাব্রিক ০.৩.৩ এবং পরামিকো ১.৯.০ ছিল।


1

এই উত্তরগুলির কোনওোটাই আমার পক্ষে পাই 3.3.7, ফ্যাব্রিক 2.5.0 এবং প্যারামিকো 2.7.1 এ কাজ করে নি।

তবে ডকুমেন্টেশনে PKey অ্যাট্রিবিউট ব্যবহার করে কাজ করে: http://docs.fabfile.org/en/2.5/concepts/authentication.html#private-key-objects

from paramiko import RSAKey
ctx.connect_kwargs.pkey = RSAKey.from_private_key_file('path_to_your_aws_key')
with Connection(ctx.host, user, connect_kwargs=ctx.connect_kwargs) as conn:
    //etc.... 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.