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

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

在我问这个问题之前,我做了很多Googlesearch。 这是我发现的:

  • 很多页面解释了如何在没有密码的情况下configurationSSH密钥
  • 很less有网页解释没有密码的SSH密钥的安全影响

因此,这个问题是杰夫·阿特伍德所说的“让互联网变得更美好”的主要候选人。

为了这个问题的目的,想象这个configuration:

  • 来源1( 不受我控制): user1@host1
  • 源2( 不受我控制): user2@host2
  • 来源X / Y / Z( 不受我控制):等
  • 目的地(由我控制): user3@host3
  • 目标:设置“作业”(脚本,不pipe)从user1@host1user2@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一起使用

在我自己的不同主机/用户之间的testing中,我知道我的设置工作。

什么麻烦我的安全影响。 而且,我承认我不是Linuxpipe理员,也不是安全专家。

  • 如果我将这个公共SSH密钥交给另一个部门使用scp ,那么如果同一个密钥泄漏/丢失/被盗给另一个部门呢?
  • 这是否暗示有权访问此公共SSH密钥的任何人都可以将scp用作host3 而不使用密码?

重要的假设要考虑你的回应:

  • 我不关心外部黑客通过更广泛的互联网。 这些是安全企业networking上的Linux机器。
  • 我无法设置其他用户ID。

我猜测有一种方法来限制特定的SSH密钥的访问,但我不知道如何。 也许~/.ssh/authorized_keys选项(我刚才了解到)? 是否有可能有多个SSH密钥 – 给每个源不同的密钥?

请告知正确的方法。

user3 @ host3可以拥有许多ssh公钥,因为他们喜欢授予对其帐户的访问权限。 有些可以用密码保护,有些则不用。

每把钥匙都有公共部分和私人部分。 这些密钥将由user1和user2生成,公有一半将被分配给user3。 用户3然后可以将这些密钥添加到他们的authorized_keys文件。 密钥是否被密码保护是由私钥确定的,而不是公共密钥。 所以如果user3被user1授予一个公钥,他们无法判断它是否被密码保护,AFAIK。

您可以在个人计算机上的authorised_keys文件中执行一些限制,如'authorized_keys:restrictting access section'中所述

比方说,你想确保user1只能连接host1和user2你可以放入host2

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

那么如果私钥被盗用或被盗用户1或用户2,则他们不能从任何其他机器接入。

不知道这是多好,但可能值得你看看scponly ,看起来阻止shell访问用户,你只希望有scp访问。