1. ホーム
  2. python

[解決済み] Fabric を使用しているときに ~/.ssh/config に記載されているホストに接続する方法

2023-06-12 18:18:41

質問

私は Fabric で指定したホストが認識されないという問題があります。 ~/.ssh/config .

私の fabfile.py は以下の通りです。

from fabric.api import run, env

env.hosts = ['lulu']

def whoami():
    run('whoami')

実行中 $ fab whoami が与える。

[lulu] ラン:フーアミ

致命的なエラーです。の名前検索に失敗しました。 lulu

名前 lulu は、私の ~/.ssh/config を、このようにします。

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

これを解決するために私が最初に考えたのは、次のようなものを追加することです。 lulu.lulu/etc/hosts (私は Mac を使っています) に変更する必要がありますが、そうすると Fabric に ID ファイルを渡す必要があります - そして私はむしろ、認証 (すなわち ~/.ssh/config など) とデプロイメント (つまり fabfile.py ).

同様に、ちなみにhostsファイルにあるホストに接続しようとした場合。 fabric.contrib.projects.rsync_project の中の 'ports' を認めないようです。 hosts.env にある「ポート」を認識しないようです (つまり、もしあなたが hosts.env = [lulu:2100] への呼び出しは rsync_project への接続を試みるようです。 lulu:21 ).

ファブリックがこの lulu という名前を認識しないのでしょうか?

どのように解決するのですか?

バージョン1.4.0から ファブリックはあなたのssh設定 を使うようになりました(一部)。しかし、明示的に有効にする必要があります。

env.use_ssh_config = True

をfabfileの先頭付近に記述してください。これを実行すると、Fabric はあなたの 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