如何在python结构中提供公钥密码短语



我写的简单代码是:

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。我该如何对通行短语进行编码?我希望它是自动化的。

现在它正在请求通行短语。

amby@amby-laptop:~/Desktop$ python fabric_test.py
[15.21.18.24] Passphrase for private key:

术语简介。密码短语用于专用密钥,如提示所示。对于ssh密钥对,密钥分为两部分——私钥需要保持安全和机密,并且永远不会离开ssh启动会话。公钥可以安全共享,并且可以自由传输。

当您试图自动化ssh事务,并且您必须提供密码短语,并且您正在考虑将密码短语存储在脚本或配置中的某个位置时,则密码短语不再是秘密,,您还不如没有密码短语


你可以试试

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

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

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

ssh rsa AAAAB3NzaC1yc。。。user@mycomputer.local

它由多个字段组成,所有字段都在一行上,由空格分隔。第一个字段是密钥类型。由字母和数字组成的长字符串对密钥对的公钥进行编码。最后一个字段是一个注释,用于帮助用户识别密钥,通常它具有生成密钥的用户名和主机名。您可以在密钥条目的前面添加一个选项字段。这包含一组逗号分隔的选项值,适用于通过该密钥对启动的会话。您可以将command参数添加到授权密钥的选项字段中,以确定允许密钥运行的特定命令。这可以用来限制无密码密钥对可以做的事情

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

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


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

典型用法:

你运行

eval `ssh-agent`

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

现在您可以运行

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

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

最新更新