如果您被迫使用 Linux 脚本连接到受密码保护的资源,您可能会对将密码放入脚本感到不安。OpenSSL 为您解决了这个问题。
将密码放在 shell 脚本中并不是一个好主意。事实上,这是一个非常糟糕的主意。如果脚本落入坏人之手,阅读它的每个人都可以看到密码是什么。但如果你被迫使用脚本,你还能做什么?
当进程到达该点时,您可以手动输入密码,但如果脚本要在无人看管的情况下运行,那将不起作用。值得庆幸的是,有一种替代方法可以将密码硬编码到脚本中。与直觉相反,它使用不同的密码来实现这一点,以及一些强加密。
在我们的示例场景中,我们需要从我们的 Ubuntu 计算机远程连接到 Fedora Linux 计算机。我们将使用 Bash shell 脚本与 Fedora 计算机建立 SSH 连接。该脚本必须在无人值守的情况下运行,并且我们不想将远程账户的密码放在脚本中。在这种情况下,我们不能使用 SSH 密钥,因为我们假装我们对 Fedora 计算机没有任何控制或管理权限。
我们将使用著名的 OpenSSL 工具包 来处理加密,并使用一个实用程序来将密码输入 SSH 命令。
因为许多其他加密和安全工具都使用 OpenSSL,所以它可能已经安装在您的计算机上。但是,如果不是,则安装只需要一点时间。
在我们开始在脚本中使用该命令之前,让我们通过在命令行上使用它来熟悉它。假设远程计算机上的帐户密码是. 我们将使用 加密该密码。
我们需要提供加密密码。加密密码用于加密和解密过程。命令中有很多参数和选项 。稍后我们将逐一介绍它们。
为了解密这个,我们需要使用我们用来加密的相同参数传递加密字符串,但添加(decrypt) 选项。
这证明我们可以安全地加密我们的远程用户账户密码。我们还可以在需要时使用我们在加密阶段提供的密码对其进行解密。
但这真的改善了我们的处境吗?如果我们需要加密密码来解密远程帐户密码,那么解密密码肯定需要在脚本中吗?嗯,是的,确实如此。但加密的远程用户帐户密码将存储在不同的隐藏文件中。该文件的权限将阻止除您之外的任何人(显然还有系统的 root 用户)访问它。
要将加密命令的输出发送到文件,我们可以使用重定向。该文件名为“.secret_vault.txt”。我们已将加密密码更改为更强大的密码。
使用权限掩码 600 会删除文件所有者以外的任何人的所有访问权限。我们现在可以继续编写我们的脚本了。
我们正在使用一个简短的此处文档将命令传递给远程计算机。两个字符串之间的所有内容都作为指令发送到远程计算机上的用户会话——在这种情况下,它是一行 Bash 脚本。
将脚本复制并粘贴到编辑器中,并将其保存到名为“go-remote.sh”的文件中。请记住更改详细信息以反映您自己的远程计算机的地址、远程用户帐户和远程帐户密码。
因为我们的脚本是无人值守脚本的极简模板,所以终端没有输出。但是如果我们检查 Fedora 计算机上的“script.log”文件,我们可以看到远程连接已经成功建立,并且“script.log”文件已经更新了时间戳。
尽管解密密码在脚本中,但没有其他人可以访问您的“.secret_vault.txt”文件以对其进行解密并检索远程帐户密码。
【小编推荐】dnf客户端修复