2011-03-09 34 views
12

我從文檔以下簡單fabfile.py:Python的面料賦予:致命錯誤:不存在會話

from fabric.api import run 

def host_type(): 
    run('uname -s') 

我嘗試運行它使用:

fab -H 192.168.0.201 host_type 

但得到的錯誤:

[email protected]:~/me$ fab -H 192.168.0.201 host_type 
[192.168.0.201] run: uname -s 
Password for [email protected]: 

Fatal error: No existing session 

Aborting. 

我可以ssh進入192.168.0.201。

任何想法?

+0

你的ssh會話有些奇怪的事情發生。服務器運行的是什麼操作系統?試試'ssh -o「PreferredAuthentications = password」'看看它是否拒絕你的訪問。 – JimB 2011-03-09 14:50:48

+0

這剛剛開始工作。除了停止虛擬機並重新啓動虛擬機之外,我沒有改變任何我能記得的事情,但我認爲我之前已經完成了......無論如何,感謝所有這些想法。 – verbatim 2011-03-10 15:08:00

回答

-1

這對我來說SSH代理失敗,造成的智能卡取出。 問題可以很容易地在「ssh user @ host」輸出中看到(在我的情況下,它是「代理承認使用密鑰簽名失敗」消息)。

我的猜測是,OP也有一些短暫的問題與SSH,因此相同(不特別清楚)paramiko錯誤。

-1

我也收到了同樣煩人的無用錯誤。經過研究並嘗試了幾件事情之後,我終於在Ubuntu 10.04上修復了它。這是我做過什麼:

  1. 找到this後,我用gconf編輯到/應用/ GNOME的鑰匙圈/守護組件/ SSH設置爲false以禁用侏儒匙扣的接口SSH。
  2. 我刪除了我的〜/ .ssh目錄。
  3. 我重新啓動。
1

要修復它

  1. 添加此行到你的面料招待:

    from fabric.api import env 
    
    env.key_filename = "/path/to/.ssh/ssk_non_public_key" 
    

    如果放置在需要由晶圓廠腳本訪問服務器上的SSH密鑰。

  2. 如果否 - 刪除你。SSH目錄,這也可以幫助

或者你可以創建SSH-凱基比使用1的組合SSH密鑰)和2)

1

更一般地,如果你得到這個錯誤,你應該嘗試用的paramiko的確切參數ssh方式連接正在嘗試使用:

  • 主機名
  • 用戶
  • 驗證方法

我發現有太多的SSH密鑰導致某些(但不是全部)我的結構SSH連接失敗,因爲所有密鑰都提供給遠程主機。在過去,格式不正確的密鑰也爲我提出了此錯誤消息(您可以通過從~/.ssh/中刪除密鑰來檢測它們,一次只能一個。)

不幸的是,Fabric不尊重您的.ssh/config設置。如果你想調試這一點,你可以運行以下命令:

#!/usr/bin/env python 
import paramiko 

paramiko.util.log_to_file("/tmp/paramiko.log") 
ssh = paramiko.SSHClient() 
# Run this if you get host key errors: see later 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect("example.com", username="myuser", password="mypassword") 

,並檢查輸出/tmp/paramiko.log - 你可能會看到類似這樣的:

INF [20120904-16:58:52.155] thr=1 paramiko.transport: Disconnect (code 2): Too many authentication failures for myuser 

您可以set no_keys on the Fabric env environment

env.no_keys = True 

但是你需要告訴Fabric爲特定的主機使用特定的密鑰。正如上文所述,你可以做你的fabfile有:

from fabric.api import env 

env.key_filename = "/path/to/.ssh/ssk_non_public_key" 

更一般here's a function to parse your .ssh config and pull out selective keys - 在這個鍵,SSH密鑰使用。對於這個自動工作,你需要IdentityFile添加到~/.ssh/config

Host example.com 
    IdentityFile /home/jp/.ssh/id_rsa_example 

失敗的另一個原因可能是paramiko does not recognize all host key types。這有點更成問題:paramiko悄悄忽略了~/.ssh/known_hosts中的主機密鑰,因爲它不是它理解的主機密鑰格式​​。嘗試的ssh-ING與-v看看SSH說什麼線發現主機密鑰匹配:

debug1: Host '1.2.3.4' is known and matches the RSA host key. 
debug1: Found key in /home/jp/.ssh/known_hosts:105 

你可以嘗試刪除這條線,然後再次做ssh和接受(新?)主機密鑰,並然後看看paramiko是否開心。如果這是問題,但這並不能解決問題,那麼我就不會看到明確的解決方案。

+0

你提交了一個錯誤報告嗎? – jberryman 2013-04-11 13:15:49

20

簡短回答:如果您有多個SSH公用密鑰並希望使用密碼驗證,請嘗試'-k'和'-a'命令行標誌。

當我遇到這個錯誤時,這是​​一個非常獨特的情況的結果。 〜/ .ssh中有許多不同的公鑰。我還有很多公鑰添加到我的SSH代理中。我試圖只用密碼來使用Fabric。

這裏是我的服務器認證日誌看到:

Nov 7 07:56:02 ubuntu sshd[1862]: Disconnecting: Too many authentication failures for user [preauth] 
Nov 7 07:56:08 ubuntu sshd[1864]: Disconnecting: Too many authentication failures for user [preauth] 

我已指示面料使用不公鑰認證與「-k」命令行標誌。我錯過了Fabric(通過Paramiko)默認使用通過SSH代理提供的任何東西。就我而言,所有這些公鑰都是在SSH代理中註冊的,所以告訴Fabric不要使用公鑰是一個不完整的解決方案。我添加了'-a'命令行標誌,告訴Fabric不要查詢SSH代理。最後,我可以使用密碼身份驗證連接到Fabric的服務器。

+4

加入'-a'爲我工作,謝謝 – gipi 2013-03-30 21:30:13

+0

你提交了一個錯誤報告嗎? – jberryman 2013-04-11 13:15:29

0

我在~/.ssh/config有私鑰,事實證明我需要用ssh-add ~/.ssh/PRIVATE_KEY_NAME再次添加它,然後一切都開始重新工作。我已經與前鋒劑使用命令optioni -A

0

沒有足夠的美譽度Troy J. Farrell's後發表評論,以響應jberryman's問題。這不是一個錯誤,而是一種處理SSH公鑰的方式。

我的問題是我加載到ssh-agent(ed25519)中的一個關鍵字與我在結構中加載到env.hosts中的系統之一不兼容。由於我確實想使用其他鍵,所以我只添加了-a選項,而不是-k選項。這工作。唯一需要注意的是,如果您的某個私鑰受密碼保護,則每次使用該密鑰時都必須輸入此密碼。