结合使用SSH密钥文件

问题描述:

如何配置结构以使用SSH密钥文件(例如Amazon EC2实例)连接到远程主机?结合使用SSH密钥文件

另外值得一提的是,你可以使用命令行参数此:

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

寻找一个简单的fabfile与SSH密钥文件的使用的工作示例是不容易的,出于某种原因。我写了一个关于它的blog postwith a matching 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配置可以寻找它。

+4

在练习中这是更好的答案。 – panchicore 2012-10-31 20:17:57

+2

'env.key_filename' [可以包含字符串列表](http://docs.fabfile.org/en/latest/usage/env.html#key-filename)为连接尝试多个密钥文件。 – 2014-04-22 12:29:14

+0

我正在使用'settings'上下文管理器在我的一个任务中以编程方式设置密钥,直到我将'key_filename ='/ path/to/key''更改为'key_filename = ['/path/to/key']'如果其他人遇到问题,使key_filename成为密钥列表可能会修复它。这是与晶圆厂1.10.1和帕拉米科1.15.2 – Jaymon 2015-05-05 00:04:15

另一个很酷的功能可作为面料1.4 - Fabric now supports SSH configs

如果你已经拥有所有你~/.ssh/config文件中的SSH连接参数,面料会原生支持它,所有你需要做的就是添加:

env.use_ssh_config = True 

你fabfile的开始。

+2

非常有用!如果遇到像IOError这样的错误:[Errno 2]没有这样的文件或目录:'/ path/to/.ssh/key''或'root'的登录密码:'确保你没有空格'的.ssh/config'。它是例如'User = root'而不是'User = root' ... – dennis 2013-12-13 12:39:09

+0

@dennis这似乎仍然是2016年的一个问题..!谢谢! – gabn88 2016-11-08 14:12:46

如上所述,Fabric将在时尚后支持.ssh/config文件设置,但使用ec2的pem文件似乎有问题。 IOW在env.host = ['servername']时,正确设置.ssh/config文件将通过'ssh servername'从命令行工作,并且无法与'fab sometask'一起工作。

这是通过指定我的fabfile.py中的env.key_filename ='keyfile'并且复制已在我的.ssh/config中的IdentityFile条目来克服的。

这可能是Fabric或paramiko,在我的例子中是Fabric 1.5.3和Paramiko 1.9.0。

对于我来说,下面没有工作:

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 [[email protected]]host[:port]] 

但是,以下做:

env.key_filename=['keyfile.pem'] 
env.hosts=["[email protected]"] 

env.key_filename=['keyfileq.pem'] 
env.host_string="[email protected]" 
+3

如果您使用'env.user =“ubuntu”'而不是'env.user = [“ubuntu”]'',您的第一个示例适用于我。 – 2016-04-20 19:58:13

我不得不这样做。今天,我.py文件是尽可能的简单,就像在@YuvalAdam的答案张贴的一个,但仍然我一直得到提示输入密码......

paramiko展望(通过面料SSH使用的库)的日志,我发现了一行:

Incompatible ssh peer (no acceptable kex algorithm)

我更新paramiko有:

sudo pip install paramiko --upgrade 

而现在它的工作。