2014-10-29 55 views
3

我写简单的代码是:如何提供蟒蛇面料公钥密码短语

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

现在我pass_phrase的公钥。我如何编码密码短语?我想它是自动的。

现在它是要求密码短语。

[email protected]:~/Desktop$ python fabric_test.py 
[15.21.18.24] Passphrase for private key: 

回答

10

关于术语的快速注释。如提示所示,该密码用于私钥密钥。使用ssh密钥对时,密钥分为两部分 - 私钥需要保持安全,并且秘密且永远不会离开ssh启动会话。公钥可以安全共享,并且可以自由传输。

当您尝试自动执行ssh事务并且您必须提供密码时,并且您正在考虑在脚本或配置中的某处存储密码时,那么密码不再是秘密,您也可以没有密码


一对夫妇的事情,你可以尝试

1)不要使用密码打扰!它们是可选的。生成没有密码的密钥,供脚本使用。很明显,这比有一个密钥对的安全性要低,你应该采取额外的步骤来锁定它。 您可以通过在远程主机的authorized_keys文件中提供其他参数来限制此ssh密钥有权运行的命令。通过这种方式,您可以拥有不太安全的密钥,但限制了任何设法访问私钥的人都可以执行的操作。

您可以使用ssh-keygen生成一个新的密钥对。为它提供一个新的文件名,只需在提示输入密码时按回车键,这将为您提供一个新的用于脚本的私有/公用密钥对,该密钥对不需要密码输入。

authorized_keys文件需要存在于远程主机上的远程用户帐户的~./ssh目录中。一个典型的键入将如下所示(为清楚起见,我已截断了关键指纹)。如果你还没有一个,你可以做一个新的。对于此文件,您需要添加新密钥对中密钥文件public的文本。这是一个.pub扩展名。公钥文本具有这种格式。

支持SSH-RSA AAAAB3NzaC1yc ... [email protected]

它由几个领域都在同一行,用空格隔开的。第一个领域是关键类型。长字符串和数字编码密钥对的公钥。最后一个字段是帮助识别人类密钥的注释,通常它具有生成密钥的用户名和主机名。您可以选择将一个选项字段添加到键入口的前面。这包含逗号分隔的一组选项值,适用于通过此密钥对启动的会话。 您可以将command参数添加到授权密钥的选项字段中,以标识允许密钥运行的特定命令。这可以用来限制无密码密钥对允许执行的操作。

命令= “/ USR/bin中/ LS” SSH-RSA AAAAB3NzaC1yc ... [email protected]

此密钥对只能运行 'ls' 的远程。


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

典型用途:

您在shell中运行

eval `ssh-agent` 

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

可以运行

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

加载专用钥匙插入剂。代理将要求您输入密码以解锁密钥。然后它将缓存shell的生命周期的凭证。因此,您可以运行使用此密钥的脚本,并且不需要提示输入密码。