【问题标题】:Can't connect to remote server with Fabric and SSH using key file无法使用密钥文件通过 Fabric 和 SSH 连接到远程服务器
【发布时间】:2012-09-02 01:57:19
【问题描述】:

我正在尝试使用 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

关于如何让它发挥作用的任何想法?

非常感谢

【问题讨论】:

  • 如果您只是尝试使用该密码以root 的身份通过 SSH 登录,您可以登录吗?
  • 如 favouretti 所说,加上 -vvv 以获取调试信息。也可以先尝试基于键的终端。
  • 从命令行单独测试 SSH 非常有帮助,感谢@favoretti 和 Jasper。

标签: python ssh fabric


【解决方案1】:

我首先从命令行单独测试了 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 时,现在可以正常工作了。

【讨论】:

  • 如果您在 fabfile 中设置了 env.use_ssh_config = False,以及主机、用户名和身份文件,~/.ssh/config 中的详细信息(对于结构)是多余的。
【解决方案2】:

在针对 PCI 合规性再次针对 Logjam 强化我们的服务器后,我们出现了这个问题。使用https://weakdh.org/sysadmin.html 作为参考,我更新了我们的 /etc/ssh/sshd_config 以包含以下行:

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 进行 Fabric 部署并保持 PCI 合规性。

【讨论】:

    【解决方案3】:

    解决方案: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")
    

    【讨论】:

      猜你喜欢
      • 2022-07-11
      • 1970-01-01
      • 2012-11-26
      • 2017-12-29
      • 2021-01-09
      • 2021-07-08
      • 2023-03-16
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多