Shell 脚本可以为您节省时间和精力,但是如果您不保护您的密码,它们就会成为您的负担。以下是如何保持安全的方法。
Bash 脚本是系统管理员工作的重要组成部分。它们允许您自动化普通和关键的任务。
使用脚本的一个好处是,它们可以在不需要人工干预的情况下独立运行,但有时自动化需要用户密码的任务可能很有挑战性。让我们看看如何在不影响安全性的情况下安全地自动化需要密码的脚本。
创建一个简单的脚本
假设您想要创建一个简单的脚本,将 Linux 主文件夹备份到远程位置,以便在数据丢失的情况下可以轻松地恢复数据。
首先在您的主文件夹中创建一个Bash脚本文件,使用touch命令或其他方法,并将其命名为 linuxmi.sh。请随意使用您喜欢的任何名称和目录。
该脚本使用 rsync 命令(一种功能强大的文件复制工具)将本地主目录中的所有文件备份到远程服务器。
复制以下脚本的内容并将其粘贴到您的 Bash 文件中。记住用本地 home 用户的正确名称替换用户 linuxmi。还要为远程服务器提供正确的用户名和IP地址。
#将数据复制到远程服务器
rsync -avl --mkpath /home/linuxmi user_name@remote_server/home/Backup
如果您没有远程服务器来进行测试,您可以简单地安装 VirtualBox 并在本地机器上设置一个 VM。使用 VM 客户机作为远程服务器。
保存文件。要执行该脚本,您需要使用sudo chmod 755命令授予它执行权限。所有用户都可以执行该脚本,但只有sudo用户可以修改该文件。
最后,从终端使用以下命令执行Bash脚本:
./linuxmi.sh
每当运行此脚本时,系统都会提示您输入远程服务器密码。如果您希望在没有人为干预的情况下运行脚本,例如在使用Cron时,这不是我们想要的。
自动化密码登录
在您的本地 PC 或运行脚本的 PC 上安装 sshpass,这是一个非交互式密码提供程序。
在基于 Debian 发行版
如果你使用的是基于 Debian 的发行版,比如 Ubuntu, Pop!_OS 或 Lubuntu:
sudo apt update && sudo apt install sshpass
在 RHEL 和 Fedora 上
dnf install sshpass
在安装 sshpass 之后修改脚本,使其看起来如下所示:
#将数据复制到远程服务器
sshpass -p "yourpassword" rsync -avl --mkpath /home/linuxmi user_name@remote_server/home/Backup
这里以纯文本的形式提供密码。显然,这不是理想的方式,因为它不安全,也不是很好的实践。如果文件落入坏人之手,你的麻烦就大了。
为了提高安全性,我们将使用 GnuPG,这是一种安全的开源加密工具。
对您的密码进行加密
在大多数Linux系统上,GnuPG是默认安装的,但是如果您的系统上没有安装GnuPG,下面介绍如何安装GnuPG。
使用命令 touch .secrets 创建一个名为 secrets 的隐藏文件。作为额外的安全措施,我们在默认情况下隐藏了文件,下面介绍如何在 Linux 上查看隐藏的文件。
在 secrets 文件中,输入远程 PC 的密码并保存。
接下来,使用 gpg 命令加密该文件。
sudo gpg .secrets
系统将提示您输入一个安全且强的密码短语以打开加密文件。
GnuPG 将创建一个新文件,扩展名 .gpg 附加在旧文件名后面。您的新文件名现在应该是 secrets.gpg,假设您使用 secrets 文件名。
如果使用cat命令查看 secrets.gpg 的内容,您将看到一些如下的文本,以表明您的密码已加密。
要以纯文本的形式查看文件的内容,您需要使用以下命令对其进行解密(系统会提示您输入在加密过程中设置的密码):
gpg -dq secrect.gpg
在脚本中使用加密密码
如需在脚本中使用加密后的密码,请按如下步骤更新脚本:
#将数据复制到远程服务器
gpg -dq secrets.gpg | sshpass rsync -avl --mkpath /home/linuxmi user_name@remote_server/home/Backup
再次运行备份脚本,这次不会提示您输入密码。
使用Bash脚本自动化任务
GnuGP 经常用于保护 PC 上的敏感文件和数据,也是保护 Linux 上自动 Bash 脚本中的密码的好工具。
使用Bash脚本可以做很多事情。Bash是一个强大的工具,可以帮助您自动化Linux上的许多东西,学习编写Bash脚本是一项值得的投资。