101

SSHキーファイル(Amazon EC2インスタンスなど)を使用してリモートホストに接続するようにファブリックをどのように設定しますか?

4

8 に答える 8

152

SSHキーファイルの使用例を含む単純なfabfileを見つけることは、何らかの理由で簡単ではありません。私はそれについてのブログ投稿を書きました(一致する要点で)。

基本的に、使用法は次のようになります。

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、Paramiko構成が接続時に環境変数を検索できるように、環境変数を設定することです。

于 2011-03-16T15:22:29.703 に答える
69

また、ここで言及する価値があるのは、これにコマンドライン引数を使用できることです。

fab command -i /path/to/key.pem [-H [user@]host[:port]]
于 2011-03-16T23:35:24.133 に答える
64

Fabric1.4の時点で利用可能なもう1つの優れた機能-FabricはSSH構成をサポートするようになりました。

ファイルにすでにすべてのSSH接続パラメーターがある場合~/.ssh/config、Fabricはそれをネイティブにサポートします。必要なのは、次を追加することだけです。

env.use_ssh_config = True

fabfileの先頭にあります。

于 2012-03-27T10:21:58.487 に答える
19

fabfileのfabric2には、以下を使用します。

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

更新:
複数のホスト(1つのホストでも可能)の場合、これを使用できます:

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)

fabまたはfab2で実行します。

fab staging stop
于 2018-08-08T09:58:17.730 に答える
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"
于 2014-02-18T07:04:21.610 に答える
7

私は今日これをしなければなりませんでした、私の.pyファイルは@YuvalAdamの答えに投稿されたもののように可能な限り単純でしたが、それでも私はパスワードの入力を求められ続けました...

paramiko(ファブリックがsshに使用するライブラリ)ログを見ると、次の行が見つかりました。

互換性のないsshピア(受け入れ可能なkexアルゴリズムなし)

私は更新paramikoしました:

sudo pip install paramiko --upgrade

そして今、それは機能しています。

于 2015-02-09T12:18:26.693 に答える
1

上記のように、Fabricはファッションの後に.ssh / configファイル設定をサポートしますが、ec2にpemファイルを使用することは問題があるようです。IOWを適切に設定した.ssh/configファイルは、コマンドラインから「sshservername」を介して機能し、env.host=['servername']の場合は「fabsometask」では機能しません。

これは、fabfile.pyでenv.key_filename ='keyfile'を指定し、すでに.ssh/configにあるIdentityFileエントリを複製することで解決されました。

これは、Fabricまたはparamikoのいずれかであり、私の場合は、Fabric1.5.3およびParamiko1.9.0でした。

于 2013-02-06T20:29:59.923 に答える
1

これらの回答はいずれも、py3.7、fabric2.5.0、およびparamiko2.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.... 
于 2020-03-17T05:27:20.763 に答える