术语说明:如提示所示,密码短语是用于 私钥。在 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 的生命周期内缓存凭据。因此,您可以运行使用此密钥的脚本,而无需提示输入密码。