4

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

关于如何使它工作的任何想法?

非常感谢

4

3 回答 3

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

于 2012-09-16T21:53:51.643 回答
0

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

KexAlgorithms curve25519-sha256@libssh.org

从 1.15.2 开始,paramiko 似乎不支持这种椭圆密钥交换算法。weakdh.org 页面说非椭圆group14-sha1diffie-hellman 算法不易受到 Logjam 的影响,因此将行更改为...

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

...允许我通过 SSH 进行 Fabric 部署以及保持 PCI 合规性。

于 2016-01-20T17:10:04.940 回答
0

解决方案:ssh-add ~/.ssh/aws_instance.pem

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

1] ssh-add ~/.ssh/aws_instance.pem
2] fab check_status

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")
于 2019-02-19T08:24:43.213 回答