我正在尝试开发一个 bash 脚本来从远程服务器下载到我的本地计算机。我调用rsync,需要避免每次都自己去获取密码。以下作品:
sshpass -p "my remote pw" rsync -r -n -t -v --progress -s myid@remote:/remote_path /local_path
问题是:有多不安全?有没有更好的方法,但实施起来足够简单。谢谢
答案1
这不是很安全,至少在多用户环境中是这样。根据sshpass
文档:
-p 选项应该被认为是所有 sshpass 选项中最不安全的。所有系统用户都可以通过简单的“ps”命令在命令行中查看密码。
其次,存在在脚本中以纯文本形式存储密码的问题。如果您打算这样做,至少请确保设置合理的权限(例如 700)。
如果可能,您应该使用基于密钥的身份验证。您仍然需要采取预防措施来降低存储在计算机上的密钥文件被泄露的可能性,但是您消除了运行命令泄露密码的问题,并且作为额外的好处,私钥可能会更强/更难破解比密码。为了使事情变得更容易,您可以在 中创建一个条目~/.ssh/config
,例如:
Host mysite.com
HostName mysite.com
Port 22
User me
IdentityFile ~/.ssh/id_mysite.key
使用上面的条目,您可以将命令修改为简单
rsync -r -n -t -v --progress -s mysite.com:/remote_path /local_path
虽然不是必需的,但我更喜欢保留所有密钥,~/.ssh
因为它限制了密钥可能浮动的位置,并且.ssh
默认情况下目录通常具有更严格的权限设置。我还将每个关键文件的权限设置为 600,因此您可以考虑将其设置为内部的默认文件权限,以更加方便并减少将来~/.ssh
忘记的可能性。chmod
最后,如果您想要更高的安全性,您可以使用密码保护您的私钥,然后seahorse
在登录时解锁它(我相信密码是加密的,解锁密码的加密密钥是您用于登录的密码)。这样,您就不必输入密码。我有一些这样的设置,但不幸的是,我不记得我是如何做到的。无论如何,这可能有点过分了。