在两个服务器之间 SCP 一个文件

在两个服务器之间 SCP 一个文件

我有一个 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-agentshell 的输出。然后执行ssh-add(对于默认.ssh/id_rsa密钥,或ssh-add path/to/key并输入一次密码。在该终端中,您现在无需输入密码即可ssh访问其他服务器,即使您使用密码生成了密钥。

相关内容