2011-03-16 82 views

回答

60

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

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

尋找一個簡單的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

64

另一個很酷的功能可作爲面料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

1

如上所述,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。

13

對於我來說,下面沒有工作:

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

6

我不得不這樣做。今天,我.py文件是儘可能的簡單,就像在@YuvalAdam的答案張貼的一個,但仍然我一直得到提示輸入密碼......

paramiko展望(通過面料SSH使用的庫)的日誌,我發現了一行:

Incompatible ssh peer (no acceptable kex algorithm)

我更新paramiko有:

sudo pip install paramiko --upgrade 

而現在它的工作。