在Fabric中使用SSH密钥文件

如何configuration光纤网以使用SSH密钥文件(例如Amazon EC2实例)连接到远程主机?

在这里也值得一提的是,你可以使用命令行参数:

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

寻找一个简单的fabfile与一个SSH密钥文件使用的工作示例是不容易的,由于某种原因。 我写了一篇关于它的博客文章 ( 有一个匹配的要点 )。

基本上,使用情况是这样的:

 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环境variables,以便env.key_filenameconfiguration可以在连接时查找它。

Fabric 1.4的另一个很酷的function – Fabric现在支持SSHconfiguration 。

如果你的~/.ssh/config文件中已经有了所有的SSH连接参数,那么Fabric将会本地支持它,你只需要添加:

 env.use_ssh_config = True 

在你的fabfile的开始。

对我而言,以下方面并不奏效:

 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" 

我今天必须这样做,我的.py文件是尽可能简单,就像在@YuvalAdam的答案张贴,但仍然不断提示input密码…

paramiko (为ssh使用的结构库)日志,我发现这行:

不兼容的ssh peer(没有可接受的kexalgorithm)

我更新了paramiko

 sudo pip install paramiko --upgrade 

现在它正在工作。

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

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

这可能是面料或paramiko,在我的情况是织物1.5.3和paramiko 1.9.0。