如果您被迫使用Linux脚本来连接受密码保护的资源,那么您可能会对将该密码放入脚本感到不安。OpenSSL为您解决了这个问题。
在shell脚本中输入密码不是一个好主意。事实上,这真是个坏主意。如果脚本落入坏人之手,每个阅读它的人都可以看到密码是什么。但如果你被迫使用脚本,你还能做什么?
当进程到达该点时,您可以手动输入密码,但是如果脚本将在无人参与的情况下运行,则无法工作。谢天谢地,除了将密码硬编码到脚本中,还有一种替代方法。与直觉相反,它使用不同的密码来实现这一点,同时使用一些强加密。
在我们的示例场景中,我们需要从Ubuntu计算机远程连接到fedoralinux计算机。我们将使用bashshell脚本与Fedora计算机建立SSH连接。脚本必须在无人参与的情况下运行,我们不想在脚本中输入远程帐户的密码。在这种情况下,我们不能使用SSH密钥,因为我们假装对Fedora计算机没有任何控制或管理权限。
我们将使用著名的OpenSSL工具箱来处理加密,并使用一个名为sshpass的实用程序将密码输入SSH命令。
相关:如何从Linux Shell创建和安装SSH密钥
因为许多其他加密和安全工具都使用OpenSSL,所以您的计算机上可能已经安装了OpenSSL。但是,如果不是,安装只需要一点时间。
在Ubuntu上,键入以下命令:
sudo apt get openssl要安装sshpass,请使用以下命令:
sudo apt install sshpass在Fedora上,您需要键入:
sudo dnf install openssl安装sshpass的命令是:
sudo dnf install sshpass在Manjaro Linux上,我们可以通过以下方式安装OpenSSL:
sudo pacman -Sy openssl最后,要安装sshpass,请使用以下命令:
sudo pacman -Sy sshpass在我们开始在脚本中使用openssl命令之前,让我们通过在命令行中使用它来熟悉它。假设远程计算机上的帐户密码已生锈!鲱鱼。竖井。我们要用openssl加密密码。
我们需要提供一个加密密码。加密密码用于加密和解密过程。openssl命令中有很多参数和选项。我们一会儿就来看看。
echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'我们使用echo通过管道将远程帐户密码发送到openssl命令中。
openssl参数包括:
我们生锈的电脑的加密版本!herring.pitshaft密码将写入终端窗口。
要对此进行解密,我们需要将加密的字符串传递到openssl中,使用与加密时相同的参数,但添加了-d(decrypt)选项。
echo U2FsdGVkX19iiiRNhEsG+wm/uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'Advertisement
字符串被解密,我们的原始文本远程用户帐户的密码被写入终端窗口。
这证明我们可以安全地加密我们的远程用户帐户密码。我们还可以在需要时使用加密阶段提供的密码对其进行解密。
但这真的改善了我们的处境吗?如果我们需要加密密码来解密远程帐户密码,那么解密密码肯定需要在脚本中吗?嗯,是的,是的。但是加密的远程用户帐户密码将存储在另一个隐藏的文件中。文件的权限将阻止除您和系统的根用户之外的任何人访问它。
要将加密命令的输出发送到文件,可以使用重定向。文件名为“.secret\u vault.txt”。我们已将加密密码更改为更可靠的密码。
echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' > .secret_vault.txt什么都看不见,但密码被加密并发送到“.secret\u vault.txt”文件。
我们可以通过解密隐藏文件中的密码来测试它是否有效。注意,我们这里使用的是cat,而不是echo。
cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password'Advertisement
密码已从文件中的数据成功解密。我们将使用chmod更改此文件的权限,以便其他人无法访问它。
chmod 600 .secret_vault.txt ls -l .secret_vault.txt使用权限掩码600将删除除文件所有者以外的任何人的所有访问权限。我们现在可以继续写剧本了。
相关:如何在Linux上使用chmod命令
我们的剧本非常简单:
#!/bin/bash # name of the remote account REMOTE_USER=geek # password for the remote account REMOTE_PASSWD=$(cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password') # remote computer REMOTE_LINUX=fedora-34.local # connect to the remote computer and put a timestamp in a file called script.log sshpass -p $REMOTE_PASSWD ssh -T $REMOTE_USER@$REMOTE_LINUX << _remote_commands echo $USER "-" $(date) >> /home/$REMOTE_USER/script.log _remote_commands有了这些信息,我们可以使用ssh命令连接到远程计算机。
RELATEDHow to Use "Here Documents" in Bash on Linux
我们正在使用一个简短的here文档将命令传递到远程计算机。两个远程命令字符串之间的所有内容都作为指令发送给远程计算机上的用户会话在本例中,它是一行Bash脚本。
发送到远程计算机的命令只需将用户名和时间戳记录到名为“script.log”的文件中
将脚本复制并粘贴到编辑器中,并将其保存到名为“go remote.sh”的文件中。记住更改详细信息以反映您自己的远程计算机的地址、远程用户帐户和远程帐户密码。
使用chmod使脚本可执行。
chmod +x go-remote.shAdvertisement
剩下的就是试试看。让我们启动脚本。
./go-remote.sh因为我们的脚本是无人参与脚本的最简模板,所以没有输出到终端。但是如果我们检查Fedora计算机上的“script.log”文件,我们可以看到远程连接已经成功建立,“script.log”文件已经用时间戳更新。
cat script.log脚本中未记录您的远程帐户密码。
尽管解密密码是,但在脚本中,没有其他人可以访问您的“.secret\u vault.txt”文件来解密它并检索远程帐户密码。
...行命令。为此,我们需要安装Gpg4win和Powershell模块。使用脚本,我们可以自动化文件加密和解密过程。 ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
...小、重命名文件夹和使用密码锁定文件。我们将向您展示如何开始使用它。 ...
...为输入运行它。这些特殊的应用程序被称为水滴。下面是如何创建一个: ...
... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...
...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...
Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...
Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...