Tai*_*ieb 6 command-line bash scripts password scp
我创建了一个 bash 脚本,运行它时有时需要我输入一些信息(其他机器密码/用户名)。
有没有办法通过在代码中输入(硬编码)这些信息来防止这种情况发生?这样当我执行它时,它会顺利运行,而无需我输入任何内容。
这是命令:
scp /home/machine1/backup/test.txt /home/machine2/backup
Run Code Online (Sandbox Code Playgroud)
我不想输入 machine2 密码,而是想在我的脚本中对其进行硬编码。
sud*_*dus 13
请不要将密码硬编码到 shellscript 中,因为其他人很容易阅读它。
登录与密钥认证来ssh是你所需要的。
这样你就不需要密码,而且也更安全。如果计算机在 Internet 上可见,这一点尤其重要。如果您认为这不重要,请尝试记录下一周的登录尝试次数。
跑步
ssh-keygen
Run Code Online (Sandbox Code Playgroud)
您可能会被要求使用密码保护密钥。
不要这样做
(在ssh-keygen询问时按 Enter 以在没有密码的情况下继续),因为您不想在运行脚本并到达scp命令行时输入任何密码或密码。
如果没有密钥身份验证和明文密码,对 shellscript 拥有严格的权限非常重要,这对于没有明文密码的安全相关 shellscript 也是一个好主意。脚本文件的默认权限(在您的主目录中的某处创建时)可能是644
$ ls -l shellscript
-rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript
Run Code Online (Sandbox Code Playgroud)
您可以为每个人授予脚本文件执行权限, 755
$ chmod 755 shellscript
$ ls -l shellscript
-rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript
Run Code Online (Sandbox Code Playgroud)
但你最好把它剪成600,除了你自己的用户 ID 没有任何权限,而且根本没有执行权限
$ chmod 600 shellscript
$ ls -l shellscript
-rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript
Run Code Online (Sandbox Code Playgroud)
并且您不能直接使用 运行它./shellscript,因此请使用
bash shellscript # when shellscript in the current directory
bash path-to-shellscript/shellscript # from other directories
Run Code Online (Sandbox Code Playgroud)ssh-keygen如果您想要更高的安全性,请执行(在询问时输入密码),因为您的私钥将受到保护(使用密码加密),但是当您使用scp.
您必须复制一个密钥文件,例如
ssh-copy-id <username>@<host>
Run Code Online (Sandbox Code Playgroud)scp用途ssh进行数据传输。因此,当钥匙就位时,它应该可以在没有密码的情况下工作。
每一个Linux机器可以制成一个ssh通过安装服务器openssh-server,在Ubuntu用apt,
sudo apt update
sudo apt install openssh-server
Run Code Online (Sandbox Code Playgroud)链接详细信息,例如故障排除提示,
小智 1
使用sshpass。在 Ubuntu 中,您可以使用sudo apt install sshpass.
这个通用语法应该可以解决问题:
sshpass -p<password> <source> <destination>
Run Code Online (Sandbox Code Playgroud)
但这并不安全。我们不要将便利性置于基本安全之上。系统上的任何其他用户都可以看到其他用户正在运行的命令和参数。为了防止这种情况,您可以读取sshpass环境变量。
export SSHPASS=<password>
sshpass -e scp <source> <destination>
Run Code Online (Sandbox Code Playgroud)
如果脚本中的unset SSHPASS其他内容不可信,我还建议运行。
使用 rsa 公钥/私钥对设置对服务器的 ssh 访问。将您的私钥保存在内存中。然后,您可以在没有密码的情况下通过 scp 或 ssh 进入服务器(除了让生活更轻松之外,密钥文件身份验证比密码身份验证更安全)
以下是如何设置 ssh 进行密钥文件身份验证: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2