Python Can';t使用结构和SSH使用密钥文件连接到远程服务器

Python Can';t使用结构和SSH使用密钥文件连接到远程服务器,python,ssh,fabric,Python,Ssh,Fabric,我正在尝试使用Fabric python脚本登录到生产服务器,然后远程运行“ls”命令。实际上我还有很多其他的命令要运行,但是我从一个简单的列表开始让它工作。我的生产服务器使用SSH,并且被锁定,因此需要私钥文件和密码 现在我在一些网站上读到了如何让它工作,但由于某种原因无法让它登录。我认为它连接正常,但出现了一条消息说: root用户的登录密码: 因此,我输入了我的密码(与env.password中的密码相同),它只是不断弹出消息 这是我的fabfile.py: from fabric.api

我正在尝试使用Fabric python脚本登录到生产服务器,然后远程运行“ls”命令。实际上我还有很多其他的命令要运行,但是我从一个简单的列表开始让它工作。我的生产服务器使用SSH,并且被锁定,因此需要私钥文件和密码

现在我在一些网站上读到了如何让它工作,但由于某种原因无法让它登录。我认为它连接正常,但出现了一条消息说:

root用户的登录密码:

因此,我输入了我的密码(与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
Host myserver
  hostname myserver.net
  port 22
  IdentityFile ~/.ssh/id_rsa
有什么办法让它工作吗


非常感谢

为了让该部分正常工作,我首先在命令行中单独测试了SSH配置。我认为SSH密钥有问题,因为我使用PuTTY生成它们,并且该格式可能与Linux使用的OpenSSH不兼容

所以首先,我在我的linux机器上创建了新的SSH密钥,没有私钥密码,私钥为我创建了两个文件id_rsa和id_rsa.pub。然后,我将id_rsa.pub中的公钥字符串复制到生产服务器上的authorized_keys文件中。然后我从命令行进行了测试。一旦开始工作,我就用布料做了测试

因此,配置更改为:

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.ppk
Host myserver
  hostname myserver.net
  port 22
  IdentityFile ~/.ssh/id_rsa

现在,当我从命令行运行
fab testlive
时,它可以正常工作。

这个问题发生在我们的服务器因PCI合规性而出现Logjam后。作为参考,我已经更新了/etc/ssh/sshd_配置,以包含以下行:

KexAlgorithms curve25519-sha256@libssh.org
截至1.15.2,paramiko似乎不支持这种椭圆密钥交换算法。weakdh.org页面上说,非椭圆
group14-sha1
diffie-hellman算法不易受到Logjam的攻击,因此将行更改为

KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group14-sha1

…允许我通过SSH进行结构部署,并维护PCI法规遵从性。

解决方案:SSH add~/.SSH/aws_instance.pem

文件名:fabfile.py
从命令提示符运行:首先添加键,然后运行fab脚本

1] ssh add~/.ssh/aws_instance.pem
2] 工厂检查状态

from fabric.api import run, env

env.hosts = ['myserver_name.in']
env.user = 'ubuntu'

def check_status():
    """
    Will show status for nginx service
    """
    run ("systemctl status nginx.service")

如果您只是尝试使用该密码以
root
身份通过SSH登录,那么您就可以按favoretti所说的那样登录,并添加
-vvv
以获取调试信息。另外,请先尝试基于终端的密钥。分别从命令行测试SSH非常有用,感谢@favoretti和Jasper。如果您在文件中设置了
env.use\SSH\u config=False
,那么
~/.SSH/config
中的详细信息是多余的(对于fabric)。