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


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.