设置 SSH 密钥以自动化 scp 的正确方法

设置 SSH 密钥以自动化 scp 的正确方法

我想设置 SSH 密钥来自动化scp作业。我目前的假设是“自动化”意味着 SSH 密钥没有密码,但我愿意接受您的建议。

在提出这个问题之前,我进行了大量 Google 搜索。以下是我发现的内容:

  • 很多页面解释了如何在没有密码的情况下配置 SSH 密钥
  • 很少有页面解释无密码 SSH 密钥的安全性问题

因此,这个问题是 Jeff Atwood 所说的“让互联网变得更美好”的主要候选问题。

为了回答这个问题,想象一下这个配置:

  • 来源 1 (不是由我控制):user1@host1
  • 来源 2 (不是由我控制):user2@host2
  • 源 X/Y/Z (不是由我控制):等等。
  • 目的地(由我控制):user3@host3
  • 目标:设置“作业”(脚本等)以使用以下方式复制文件user1@host1user2@host2user3@host3scp

我已经了解:

  • ssh-keygen生成 SSH 密钥
  • SSH 密钥可以为空或无密码
  • ~/.ssh/id_dsa有私钥
  • ~/.ssh/id_dsa.pub有公钥
  • 复制~/.ssh/id_dsa.pub~/.ssh/authorized_keys并仔细设置其文件权限
  • 与其他用户/主机共享内容~/.ssh/id_dsa.pub以供使用scp

在我对不同主机/用户进行的测试中,我知道我的设置有效。

让我感到困扰的是安全隐患。我承认我不是 Linux 管理员,也不是安全专家。

  • 如果我将此公共 SSH 密钥提供给另一个部门使用scp,那么如果同一个密钥泄露/丢失/被盗给另一个部门怎么办?
  • 这是否意味着任何有权访问此公共 SSH 密钥的人都可以scp使用host3user3 没有密码?

您在回答时需考虑的重要假设:

  • 我并不关心通过更广泛的互联网的外部黑客。这些是安全公司网络上的 Linux 机器。
  • 我无法设置额外的用户 ID。

我猜有一种方法可以限制特定 SSH 密钥的访问,但我不知道怎么做。也许是~/.ssh/authorized_keys选项(我今天才知道)?是否可以有多个 SSH 密钥——为每个源提供不同的密钥?

请告知正确的方法。

答案1

user3@host3 可以拥有任意数量的 ssh 公钥,用于授予其帐户访问权限。有些可以受密码保护,有些则不受密码保护。

每个密钥都有公钥和私钥部分。密钥将由用户 1 和用户 2 生成,公钥部分将提供给用户 3。然后用户 3 可以将这些密钥添加到他们的 authorized_keys 文件中。密钥是否受密码保护取决于私钥,而不是公钥。因此,如果用户 1 为用户 3 提供了公钥,据我所知,他们无法判断它是否受密码保护。

您可以在各个机器上的 authorised_keys 文件中执行一些限制,如“authorized_keys:限制访问部分”中所述这里

比如说,你想确保用户 1 只能从主机 1 连接,而用户 2 只能从主机 2 连接,你可以输入

from="host1" <user1 public key>
from="host2" <user2 public key>

那么,如果用户 1 或用户 2 的私钥被泄露或被盗,他们将无法从任何其他机器连接。

不确定这有多好,但可能值得你研究一下scponly这样做的目的是为了防止只希望具有 scp 访问权限的用户访问 shell。

相关内容