如何在Python Fabric中提供公钥密码短语

4
我已经编写的简单代码是:

我已经编写的简单代码是:

env.host_string = '15.21.18.24'
with settings(user=user, key_filename='/home/amby/.ssh/id_rsa.pub'):
    put(local_path, remote_path)

现在我有公钥的密码短语。我该如何编写这个密码短语?我希望它是自动化的。
现在它正在要求输入密码短语。
amby@amby-laptop:~/Desktop$ python fabric_test.py
[15.21.18.24] Passphrase for private key:
1个回答

12

术语说明:如提示所示,密码短语是用于 私钥。在 SSH 密钥对中,密钥分为两部分 - 私钥需要保密,秘密并且永远不会离开 SSH 启动会话。公钥可以安全地共享,并可自由传输。

当您尝试自动化 SSH 交易,并且必须提供密码短语,并考虑将密码短语存储在脚本或配置中时,则密码短语不再是机密,实际上您可能没有密码短语


您可以尝试以下几件事情:

1)不要使用密码短语!它们是可选的。生成一个不带密码短语的密钥,供您的脚本使用。显然,这比具有密码短语的密钥对要不安全,并且您应该采取额外步骤来锁定此密钥。 您可以通过在远程主机上的 authorized_keys 文件中提供其他参数来限制此 ssh 密钥被授权运行的命令。通过这种方式,您可以拥有不太安全的密钥,但限制任何成功访问私钥的人可能造成的损害。

您可以使用 ssh-keygen 生成新的密钥对。给它一个新文件名,当提示输入密码短语时,只需按 Enter 键,这将为您生成一个新的私钥/公钥对,可用于脚本,无需输入密码短语。

远程用户帐户在远程主机上的 ~./ssh 目录中需要存在 authorized_keys 文件。典型的密钥条目如下所示(我已缩短了密钥指纹以方便阅读)。如果您还没有,请创建一个新的。在此文件中,您需要添加新密钥对的 公共 密钥文件的文本。这是具有 .pub 扩展名的文件。公钥文本具有以下格式。

ssh-rsa AAAAB3NzaC1yc... user@mycomputer.local

它由几个字段组成,全部在一行上,用空格分隔。第一个字段是密钥类型。长字符串编码了密钥对的公钥。最后一个字段是注释,用于帮助人们识别密钥,通常包含生成密钥的用户和主机名。您可以选择在密钥条目的前面添加一个选项字段。这包含逗号分隔的适用于通过此密钥对启动的会话的选项值集合。 您可以将 command 参数添加到 authorized keys 的选项字段中,以标识密钥被允许运行的特定命令。这可用于限制不需要密码短语的密钥对所允许的操作。

command="/usr/bin/ls" ssh-rsa AAAAB3NzaC1yc... user@mycomputer.local

此密钥对只能在远程运行“ls”。


2)使用 ssh-agent。如果在执行脚本时,在 shell 环境中具有已验证的代理,则它将提供 ssh 密钥凭据,而无需每次都提供密码短语。

典型用法:

您运行

eval `ssh-agent`

在shell中启动代理守护程序。eval表达式会导致代理会话环境变量被设置到shell环境中。

现在您可以运行

ssh-add ~/.ssh/my-passphraseless-private-key.rsa 

要将私钥加载到代理中。代理会要求您输入密码来解锁该密钥。然后,它会在 shell 的生命周期内缓存凭据。因此,您可以运行使用此密钥的脚本,而无需提示输入密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接