在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_filename
configuration可以在连接时查找它。
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。