我想设置 SSH 密钥来自动化scp
作业。我目前的假设是“自动化”意味着 SSH 密钥没有密码,但我愿意接受您的建议。
在提出这个问题之前,我进行了大量 Google 搜索。以下是我发现的内容:
- 很多页面解释了如何在没有密码的情况下配置 SSH 密钥
- 很少有页面解释无密码 SSH 密钥的安全性问题
因此,这个问题是 Jeff Atwood 所说的“让互联网变得更美好”的主要候选问题。
为了回答这个问题,想象一下这个配置:
- 来源 1 (不是由我控制):
user1@host1
- 来源 2 (不是由我控制):
user2@host2
- 源 X/Y/Z (不是由我控制):等等。
- 目的地(由我控制):
user3@host3
- 目标:设置“作业”(脚本等)以使用以下方式复制文件
user1@host1
:user2@host2
user3@host3
scp
我已经了解:
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
使用host3
user3
没有密码?
您在回答时需考虑的重要假设:
- 我并不关心通过更广泛的互联网的外部黑客。这些是安全公司网络上的 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。