我有一个 Digital Ocean droplet(服务器 A),它使用 SSH 密钥和密码作为我的 root 帐户。我按照以下指南创建了一个附加用户并将其添加到新的 SFTPUsers 组:
https://www.digitalocean.com/community/questions/how-do-i-restrict-a-user-to-a-specific-directory
我在共享主机(不在 Digital Ocean 上)上还有另一台服务器,里面有夜间备份文件。(服务器 B)
我想每晚安全地将这些夜间备份从服务器 B 复制到我的 DO 服务器(服务器 A)上的一个目录,我的备份用户可以访问该目录,并且想使用脚本来执行此操作,这样它就不需要输入密码就可以直接运行。我真的很困惑接下来该怎么做。我发现我研究得越多,就越困惑。我在服务器 B 上生成公钥/私钥,然后将公钥复制到服务器 A?然后会发生什么?
就如何将文件从我的一台服务器 SCP 到数字海洋服务器而言,我该怎么做?我想使用我创建的新用户来执行此操作。非常欢迎任何正确的帮助/指示。我尝试阅读 SSH/公钥/私钥,但仍然感觉没有取得进展 :(
谢谢!
答案1
我是否需要为该用户创建不同的 SSH 密钥?我会在 DO 服务器上执行此操作吗?我甚至无法以这个新用户身份登录,因为当我尝试登录时,系统显示拒绝访问(公钥)。但是,当我使用该密钥时,我可以以 root 身份登录。
当然,您可以对所有事情使用相同的密钥。但是,最好对不同的用户使用不同的密钥。因此,我建议为非用户生成密钥root
。(并且可能不输入密码,否则您必须理解ssh-agent
(见下文)。)您将在 DO 服务器上生成密钥,然后附加公钥...请参阅下一步。
我如何确保 droplet 允许从其他服务器进行访问?我读到您可以将在 DO 服务器上创建的公钥复制到共享服务器的 .ssh 目录,然后将其附加到 authorized_keys。对吗?
您不必将其复制到~/.ssh
目录中。您只需将其附加到目录authorized_keys
中即可~/.ssh
。
即使密钥被复制过来,它仍然会有一个密码,我需要输入,不是吗?密码会保存在哪里?环境变量?
仅当您在生成密钥时输入密码时才会发生这种情况。您可以使用 存储密码ssh-agent
。运行ssh-agent
将运行一个后台进程,该进程负责在您ssh
(或scp
等)进入不同的服务器时填写密码,但仅适用于您输入的密钥ssh-add
。它还将输出几行,如下所示:
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-mjHm7nFyhJSh/agent.21838; export SSH_AUTH_SOCK;
SSH_AGENT_PID=21839; export SSH_AGENT_PID;
echo Agent pid 21839;
这些是 shell 命令。如果您将它们粘贴到 shell 中,您将能够ssh-agent
在该 shell 中使用。您还可以执行eval $(ssh-agent)
以自动评估ssh-agent
shell 的输出。然后执行ssh-add
(对于默认.ssh/id_rsa
密钥,或ssh-add path/to/key
并输入一次密码。在该终端中,您现在无需输入密码即可ssh
访问其他服务器,即使您使用密码生成了密钥。