我写的简单代码是:
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:
答案 0 :(得分:11)
关于术语的快速说明。密码用于私有键,如提示所示。使用ssh密钥对,密钥分为两部分 - 私钥需要保持安全,秘密并且永远不会离开ssh启动会话。公钥可以安全共享,并且可以自由传输。
当您尝试自动执行ssh事务,并且您必须提供密码短语,并且您正在考虑将密码短语存储在脚本或配置中的某个位置时,密码短语不再是秘密,您可能会像没有密码短语。
你可以尝试一些事情
1)不要打扰密码!它们是可选的。生成没有密码的密钥,供脚本使用。显然,这比具有密钥对的密钥对安全性差,你应该采取额外的措施来锁定它。 您可以通过在远程主机上的authorized_keys文件中提供其他参数来限制授权此ssh密钥运行的命令。通过这种方式,您可以使用安全性较低的密钥,但可以限制任何设法访问私钥的人所造成的损害
您可以使用ssh-keygen
生成新的密钥对。给它一个新的文件名,只要在提示输入密码时按Enter键,这将为你提供一个新的私有/公共密钥对,用于你的脚本,不需要密码输入。
authorized_keys
文件需要存在于远程主机上远程用户帐户的~./ssh
目录中。典型的密钥条目将如下所示(为清晰起见,我已截断密钥指纹)。如果你还没有,那么你可以换一个新的。要在此文件中添加新密钥对中 public 密钥文件的文本。这是一个.pub
扩展名的广告。公钥文本具有这种格式。
ssh-rsa AAAAB3NzaC1yc ... user@mycomputer.local
它由一行中的几个字段组成,以空格分隔。第一个字段是密钥类型。长串的字母和数字编码密钥对的公钥。最后一个字段是一个注释,用于帮助识别人类的密钥,通常它具有生成密钥的用户名和主机名。您可以选择将选项字段添加到键条目的前面。它包含一组逗号分隔的选项值,适用于通过此密钥对启动的会话。
您可以在选项字段中将command
参数添加到授权密钥,以标识允许密钥运行的特定命令。这可用于限制允许无密码短语对的事情。
命令="在/ usr / bin中/ LS" ssh-rsa AAAAB3NzaC1yc ... user@mycomputer.local
此密钥对只能运行' ls'远程的。
2)使用ssh-agent。如果在执行脚本时shell环境中有经过身份验证的代理,它将提供ssh密钥凭据,而不必每次都提供密码。
典型用法:
你跑
eval `ssh-agent`
在shell中启动agent-daemon。 eval表达式导致在shell环境中设置代理会话环境变量。
现在你可以运行
了ssh-add ~/.ssh/my-passphraseless-private-key.rsa
将私钥加载到代理中。代理将询问您密码以解锁密钥。然后它将缓存shell的生命周期的凭据。因此,您可以运行使用此密钥的脚本,并且无需提示输入密码。