在Fabric中使用SSH密钥文件

104 投票
8 回答
63452 浏览
提问于 2025-04-16 13:49

你怎么设置fabric,让它通过SSH密钥文件连接到远程主机(比如,亚马逊的EC2实例)呢?

8 个回答

67

Fabric 1.4 版本新增了一个很酷的功能 - 现在 Fabric 支持 SSH 配置

如果你已经把所有的 SSH 连接参数放在了你的 ~/.ssh/config 文件里,Fabric 会自动支持这些设置,你只需要在你的 fabfile 开头添加:

env.use_ssh_config = True

就可以了。

154

找一个简单的fabfile示例,能展示如何使用SSH密钥文件,真的是不太容易。我写了一篇博客文章来讲这个问题(还有一个相关的gist)。

基本上,使用的步骤大概是这样的:

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在连接的时候才能找到它。

71

这里还值得一提的是,你可以使用命令行参数来实现这个功能:

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

撰写回答