如何在bash脚本中使用加密密码

如果您被迫使用Linux脚本来连接受密码保护的资源,那么您可能会对将该密码放入脚本感到不安。OpenSSL为您解决了这个问题。...

如果您被迫使用Linux脚本来连接受密码保护的资源,那么您可能会对将该密码放入脚本感到不安。OpenSSL为您解决了这个问题。

密码和脚本

在shell脚本中输入密码不是一个好主意。事实上,这真是个坏主意。如果脚本落入坏人之手,每个阅读它的人都可以看到密码是什么。但如果你被迫使用脚本,你还能做什么?

当进程到达该点时,您可以手动输入密码,但是如果脚本将在无人参与的情况下运行,则无法工作。谢天谢地,除了将密码硬编码到脚本中,还有一种替代方法。与直觉相反,它使用不同的密码来实现这一点,同时使用一些强加密。

在我们的示例场景中,我们需要从Ubuntu计算机远程连接到fedoralinux计算机。我们将使用bashshell脚本与Fedora计算机建立SSH连接。脚本必须在无人参与的情况下运行,我们不想在脚本中输入远程帐户的密码。在这种情况下,我们不能使用SSH密钥,因为我们假装对Fedora计算机没有任何控制或管理权限。

我们将使用著名的OpenSSL工具箱来处理加密,并使用一个名为sshpass的实用程序将密码输入SSH命令。

相关:如何从Linux Shell创建和安装SSH密钥

安装openssl和sshpass

因为许多其他加密和安全工具都使用OpenSSL,所以您的计算机上可能已经安装了OpenSSL。但是,如果不是,安装只需要一点时间。

在Ubuntu上,键入以下命令:

sudo apt get openssl

如何在bash脚本中使用加密密码

要安装sshpass,请使用以下命令:

sudo apt install sshpass

如何在bash脚本中使用加密密码

在Fedora上,您需要键入:

sudo dnf install openssl

如何在bash脚本中使用加密密码

安装sshpass的命令是:

sudo dnf install sshpass

如何在bash脚本中使用加密密码

在Manjaro Linux上,我们可以通过以下方式安装OpenSSL:

sudo pacman -Sy openssl

如何在bash脚本中使用加密密码

最后,要安装sshpass,请使用以下命令:

sudo pacman -Sy sshpass

如何在bash脚本中使用加密密码

在命令行上加密

在我们开始在脚本中使用openssl命令之前,让我们通过在命令行中使用它来熟悉它。假设远程计算机上的帐户密码已生锈!鲱鱼。竖井。我们要用openssl加密密码。

我们需要提供一个加密密码。加密密码用于加密和解密过程。openssl命令中有很多参数和选项。我们一会儿就来看看。

echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'

如何在bash脚本中使用加密密码

我们使用echo通过管道将远程帐户密码发送到openssl命令中。

openssl参数包括:

  • enc-aes-256-cbc:编码类型。我们使用高级加密标准256位密钥密码和密码块链接。
  • -md sha512:消息摘要(哈希)类型。我们使用的是SHA512加密算法。
  • -答:这告诉openssl在加密阶段之后和解密阶段之前应用base-64编码。
  • -pbkdf2:使用基于密码的密钥派生函数2(pbkdf2)使得暴力攻击很难成功猜到您的密码。PBKDF2需要许多计算来执行加密。攻击者需要复制所有这些计算。
  • -iter 100000:设置PBKDF2将使用的计算次数。
  • -salt:使用随机应用的salt值会使加密输出每次都不同,即使纯文本是相同的。
  • -pass:'pick.your.password':我们需要用来解密加密的远程密码的密码。用您选择的可靠密码替换pick.your.password。

我们生锈的电脑的加密版本!herring.pitshaft密码将写入终端窗口。

如何在bash脚本中使用加密密码

要对此进行解密,我们需要将加密的字符串传递到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'

如何在bash脚本中使用加密密码

Advertisement

字符串被解密,我们的原始文本远程用户帐户的密码被写入终端窗口。

如何在bash脚本中使用加密密码

这证明我们可以安全地加密我们的远程用户帐户密码。我们还可以在需要时使用加密阶段提供的密码对其进行解密。

但这真的改善了我们的处境吗?如果我们需要加密密码来解密远程帐户密码,那么解密密码肯定需要在脚本中吗?嗯,是的,是的。但是加密的远程用户帐户密码将存储在另一个隐藏的文件中。文件的权限将阻止除您和系统的根用户之外的任何人访问它。

要将加密命令的输出发送到文件,可以使用重定向。文件名为“.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

如何在bash脚本中使用加密密码

什么都看不见,但密码被加密并发送到“.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'

如何在bash脚本中使用加密密码

Advertisement

密码已从文件中的数据成功解密。我们将使用chmod更改此文件的权限,以便其他人无法访问它。

chmod 600 .secret_vault.txt ls -l .secret_vault.txt

如何在bash脚本中使用加密密码

使用权限掩码600将删除除文件所有者以外的任何人的所有访问权限。我们现在可以继续写剧本了。

相关:如何在Linux上使用chmod命令

在脚本中使用openssl

我们的剧本非常简单:

#!/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
  • 我们将一个名为REMOTE\u USER的变量设置为“geek”
  • 然后,我们使用刚才使用的相同命令,将名为REMOTE\u PASSWD的变量设置为从“.secret\u vault.txt”文件中提取的解密密码的值。
  • 远程计算机的位置存储在一个名为remote\u LINUX的变量中。

有了这些信息,我们可以使用ssh命令连接到远程计算机。

  • sshpass命令是连接线上的第一个命令。我们使用-p(密码)选项。这允许我们指定应该发送到ssh命令的密码。
  • 我们在ssh中使用-T(disable pseudo terminal allocation)选项,因为我们不需要在远程计算机上为我们分配一个伪TTY。

How to Use "Here Documents" in Bash on Linux

RELATEDHow to Use "Here Documents" in Bash on Linux

我们正在使用一个简短的here文档将命令传递到远程计算机。两个远程命令字符串之间的所有内容都作为指令发送给远程计算机上的用户会话在本例中,它是一行Bash脚本。

发送到远程计算机的命令只需将用户名和时间戳记录到名为“script.log”的文件中

将脚本复制并粘贴到编辑器中,并将其保存到名为“go remote.sh”的文件中。记住更改详细信息以反映您自己的远程计算机的地址、远程用户帐户和远程帐户密码。

使用chmod使脚本可执行。

chmod +x go-remote.sh

如何在bash脚本中使用加密密码

Advertisement

剩下的就是试试看。让我们启动脚本。

./go-remote.sh

如何在bash脚本中使用加密密码

因为我们的脚本是无人参与脚本的最简模板,所以没有输出到终端。但是如果我们检查Fedora计算机上的“script.log”文件,我们可以看到远程连接已经成功建立,“script.log”文件已经用时间戳更新。

cat script.log

如何在bash脚本中使用加密密码

你的密码是私有的

脚本中未记录您的远程帐户密码。

尽管解密密码是,但在脚本中,没有其他人可以访问您的“.secret\u vault.txt”文件来解密它并检索远程帐户密码。

  • 发表于 2021-07-14 09:13
  • 阅读 ( 171 )
  • 分类:互联网

你可能感兴趣的文章

什么是shell脚本,为什么要使用它

... 如何执行shell脚本?很简单。只需将脚本路径作为参数传递给shell: ...

  • 发布于 2021-03-13 04:53
  • 阅读 ( 247 )

使用此powershell脚本在windows中自动执行文件加密

...行命令。为此,我们需要安装Gpg4win和Powershell模块。使用脚本,我们可以自动化文件加密和解密过程。 ...

  • 发布于 2021-03-13 21:58
  • 阅读 ( 352 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 307 )

什么是applescript?编写第一个mac自动化脚本

...小、重命名文件夹和使用密码锁定文件。我们将向您展示如何开始使用它。 ...

  • 发布于 2021-03-20 16:33
  • 阅读 ( 526 )

如何使用applescript将bash脚本转换为可单击的应用程序

...为输入运行它。这些特殊的应用程序被称为水滴。下面是如何创建一个: ...

  • 发布于 2021-03-21 09:39
  • 阅读 ( 248 )

在linux中,“bash”是什么意思?

...在这篇短文中,我们将探讨Bash是什么,它做什么,以及如何开始使用它。 ...

  • 发布于 2021-03-28 13:14
  • 阅读 ( 451 )

关于linux中bash for loops的所有知识

... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 312 )

如何使用受限shell来限制linux用户可以做什么

...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 386 )

如何使用chsh在linux上更改默认shell

Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...

  • 发布于 2021-04-02 06:04
  • 阅读 ( 337 )

如何在linux上的bash中设置环境变量

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 220 )
jah60197
jah60197

0 篇文章

相关推荐