我在树莓派 3
我有一个脚本,在 ubuntu 启动时以 root 身份运行。为了正确运行该脚本,我需要密码。换句话说,我的脚本的开头是这样的:
#!/bin/bash
myPassword=(cat /root/foo/psw.txt) # get password from disk
....
... etc
我通过运行以下命令保护了我的密码:
sudo chown root:root /root/foo/psw.txt
sudo chmod 700 /root/foo/psw.txt
由于该命令,只有 root 用户可以读取该文件/root/foo/psw.txt
。
但根据这个问题:
这意味着如果有人拿到 SD 卡并从磁盘读取数据,他们会找到纯文本形式的密码!
所以我的问题是如何安全地将密码传递给我的脚本,以便如果有人从 SD 卡读取数据,他们就找不到密码?
通过阅读和在互联网上研究,每个人都说不要存储密码。
那么解决方案是下载密码吗?如果我下载了密码,这意味着其他人也可以下载密码。假设我下载了密码并且它是加密的。我必须存储另一个密码才能解密该文件,这样我就只剩下另一个密码了。
答案1
我有一台服务器A
和我的树莓派B
。其他人可以访问B
但不能访问A
。换句话说,服务器A
在云端,而树莓派在办公楼上。以下是解决问题的步骤:
在服务器上生成公钥和私钥
A
。ssh-keygen -t rsa -b 4096
在 rapberry pi 上安装 SSH
B
,并将步骤 1 中生成的公钥(id_rsa.pub)放入/root/.ssh/authorized_keys
(请注意,authorized_keys 是一个文件,不是一个目录,它包含公钥)
仅允许使用 RSA 进行 ssh 登录
B
PasswordAuthentication no RSAAuthentication yes AuthorizedKeysFile /root/.ssh/authorized_keys
现在无需存储任何密码
A
即可访问B
B
ssh -i </path/to/privateKey> root@raspberryPiIpAddress
因此,在
B
启动时它将发送通知到A
。A
然后将创建一个安全的 ssh 连接B
。将通过 sshA
发送需要执行的命令。B