2012-09-08 46 views
4

我試圖使用Fabric python腳本登錄到生產服務器,然後遠程運行'ls'命令。嗯,其實我還有很多其他的命令可以運行,但我現在用一個簡單的列表開始工作。我的生產服務器使用SSH並被鎖定,因此它需要私鑰文件和密碼。使用密鑰文件無法使用Fabric和SSH連接到遠程服務器

現在我一直在閱讀一些網站上關於如何讓這個工作,但由於某種原因無法登錄。我覺得它連接好,但消息出現說:

爲「根」登錄密碼:

所以我輸入密碼(同一個在env.password),它只是不斷彈出消息。

這裏是我的fabfile.py:

from fabric.api import * 

env.use_ssh_config = True 
env.hosts = ["myserver.net"] 
env.user = "root" 
env.key_filename = "/home/myusername/.ssh/id_rsa.ppk" 
env.password = "mypassword" 
env.port = 22 

def testlive(): 
    run("ls") 

下面是/home/myusername/.ssh/config我的SSH配置:

Host myserver 
    hostname myserver.net 
    port 22 
    IdentityFile ~/.ssh/id_rsa.ppk 

如何得到這個工作任何想法?

非常感謝

+2

如果您只是嘗試通過SSH以root身份使用該密碼登錄,您會進入嗎? – favoretti

+1

正如favoretti所說,加上'-vvv'來獲取調試信息。首先嚐試通過終端進行基於密鑰的操作。 –

+0

從命令行單獨測試SSH非常有用,感謝@favoretti和Jasper。 – zuallauz

回答

8

我結束了在命令行單獨測試SSH配置首先要得到的那部分工作。我認爲SSH密鑰存在問題,因爲我使用PuTTY來生成它們,而且這種格式可能與Linux使用的OpenSSH格式不兼容。

因此,我首先在我的linux機器上創建了新的SSH密鑰,沒有爲我創建兩個文件id_rsa和id_rsa.pub的私鑰密碼。然後我將公鑰字符串從id_rsa.pub複製到生產服務器上的authorized_keys文件中。然後我從命令行進行測試。一旦這個工作正常,我就使用Fabric進行測試

所以配置改變的樣子:

from fabric.api import * 

env.use_ssh_config = True 
env.hosts = ["myserver"] 
env.user = "root" 
env.key_filename = "/home/myusername/.ssh/id_rsa" 
env.password = "" 
env.port = 22 

def testlive(): 
    run("ls") 

下面是/home/myusername/.ssh/config我的SSH配置:

Host myserver 
    hostname myserver.net 
    port 22 
    IdentityFile ~/.ssh/id_rsa 

現在工作得很好,當我從命令行運行fab testlive

+1

如果您在fabfile中設置了'env.use_ssh_config = False'以及主機,用戶名和標識文件,'〜/ .ssh/config'中的詳細信息是冗餘的(對於結構)。 – Ville

0

在我們的服務器再次強化Logjam以符合PCI規範後,我們發生了此問題。使用https://weakdh.org/sysadmin.html作爲參考,我已經更新了我們的/ etc/SSH/sshd_config中包括行:

KexAlgorithms [email protected] 

截至1.15.2,的paramiko似乎並不支持這種橢圓密鑰交換算法。該weakdh.org頁說,非橢圓group14-sha1的Diffie-Hellman算法是不容易的僵局,所以轉產到...

KexAlgorithms [email protected],diffie-hellman-group14-sha1 

...讓我做面料部署通過SSH以及作爲維護PCI合規性。

相關問題