公钥如何“发送”到服务器,私钥如何“用于” SSH?


11

有两台Linux机器,即A和B。在A上运行的脚本必须能够通过SSH进入B。因此,A生成一个公共密钥(可能是ssh-keygen-generated id_rsa.pub),然后使用其各自的私有密钥(再次可能是id_rsa)进行创建。 SSH连接。

如果我上面所说的任何话不正确或被误导,请先纠正我!

假设我或多或少地达到了目标:

  • A如何“给” B公钥(id_rsa.pub)?这必须是手动过程,还是可以自动化?如果是手动操作,将如何进行?如果是自动化的,命令是什么?当B“获取”此公共密钥时,它将去哪里或将其存储在哪里?
  • 启动到B的SSH连接时,A如何“使用”其私钥(id_rsa)作为该连接的一部分?

3
为什么没有投票的解释?它表明研究是SSCCE,据我所知不是重复的。如果您不同意并认为这是重复的,请提供指向您认为它重复的问题的链接!
user3178622

尽管我没有投票,也没有认为这个问题有什么坏处,但也许信息安全堆栈将是一个更合适的地方。
MC10 2015年

3
我也没有拒绝投票,但我知道有人为什么投票。这是一种广泛使用的登录方法,尽管我同意Google搜索结果的混乱之处在于如何使其起作用,而不是其如何影响文章。.可以找到所需的信息。
泰森

5
SSCCE的概念实际上不适用于与代码无关的问题。
斯科特,

2
不是重复的,而是相关的:superuser.com/questions/383732/how-does-ssh-encryption-work。可能回答问题的第二部分(如何使用私钥)
Jay

Answers:


5

ssh-keygen生成公钥和私钥,它们最初仅位于本地。用户需要手动将公用密钥提供给另一台主机,方法是将其发送给负责服务器B的某人,或者如果您拥有一个带有密码的帐户,则可以自己登录并放置在该主机上。为了允许无密码登录服务器B,您需要将公共密钥添加到服务器B上的〜/ .ssh / authorized_keys文件中(每行一个公共密钥,此文件中可以有任意数量的密钥)。有一个Linux命令ssh-copy-id将为您复制ID并将其放入文件中。

默认情况下,ssh将使用〜/ .ssh / id_XXX文件作为您的私钥。XXX可以是rsa,dsa或为其生成密钥的任何协议。IIRC,dsa很老,不应该使用。如果要使用其他私钥,则可以在ssh命令中指定它-i。只要所使用的私钥与远程计算机上的公钥匹配(在您登录的用户帐户的authorized_keys文件中),那么就不需要提供密码。


感谢@BamaPookie-一些后续操作:(1)ssh-keygen运行时,您提到两个键“仅本地驻留”吗?哪里?!?就像在其中一样,我可以导航到哪个文件夹并查看id_rsa.pubid_rsa?(2)我以为ssh-add是在上添加公钥的命令authorized_keys,不是吗?ssh-copy-id和之间有什么区别ssh-add?再次感谢!
user3178622

2
@ user3178622 re'1'我前面没有,但看起来像re'2 ~/.ssh/id_rsa ',ssh-add不是用于添加到authorized_keys,而是用于添加到钥匙串。.我还没有使用过ssh -虽然添加。ssh-add与使您不必在每次使用需要密钥短语的密钥时都输入密钥短语有关。因此,如果您的ssh密钥不需要密钥短语,那么我想没有任何理由要使用ssh-add,并且我认为您仍然需要使用ssh-copy-id或手动将公钥复制到authorized_keys
barlop 2015年

2
ssh-keygen会询问您将文件保存在哪里,但默认位置在〜/ .ssh /中。ssh-copy-id将公钥复制到远程主机。ssh-add将私钥添加到本地密钥环。在本地密钥环中添加私钥意味着在尝试ssh连接时默认情况下将对其进行检查(也就是说,无需使用-i进行指定)。
BamaPookie 2015年

1
@BamaPookie在此处编写“在本地single环中添加私钥意味着在尝试ssh连接时默认情况下将对其进行检查(也就是说,无需使用-i进行指定)。” <---值得澄清我认为您的意思是,它更改了选择的默认私钥,因此它不是id_rsa,而是来自密钥环。(当然,没有ssh-add,您仍然不必使用-i指定私钥,它将仍然具有默认值,只是一个不同的默认值)。
barlop 2015年

3

有两台Linux机器,即A和B。在A上运行的脚本需要能够通过SSH进入B。因此A生成了一个公钥(可能是ssh-keygen生成的id_rsa.pub),然后使用了它们各自的私钥(再次,可能是id_rsa)建立该SSH连接。

如果我上面所说的任何话不正确或被误导,请先纠正我!

假设我或多或少地达到了目标:

是的

但B需要A的公钥在B的authorized_keys文件中列出,以便A能够连接到B

您也可以删除id_rsa.pub和ssh到B,它仍然可以工作,因为公钥是通过每个ssh连接重新生成的,并且不存储在任何id_rsa.pub中

A如何“给” B公钥(id_rsa.pub)?这必须是手动过程,还是可以自动化?如果是手动操作,将如何进行?如果是自动化的,命令是什么?

手册 -类似

来自A-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

甚至更多手动操作,以分解命令

澳元 cat id_rsa.pub | ssh user@host 'cat>~/a.a'

然后在B上,确保〜/ .ssh存在,然后执行 cat a.a >> ~/.ssh/authorized_keys

并且可以在B之前和之后添加B的authorized_keys,以确保列出了该密钥。

或者您可以通过电子邮件将id_rsa.pub发送到一个电子邮件帐户,然后B可以从B检查电子邮件并将id_rsa.pub的内容附加到他的authorized_keys文件中

自动地

ssh-copy-id命令

您需要能够ssh进入,因此您需要密码访问权限

而不是ssh user @ host,而是执行ssh-copy-id user @ host,并提示您输入密码,然后输入密码并进入,它将复制公钥。下次您使用ssh user @ host时,它将使用密钥。

当B“获取”此公共密钥时,它将去哪里或将其存储在哪里?

B的〜/ .ssh / authorized_keys

启动到B的SSH连接时,A如何“使用”其私钥(id_rsa)作为该连接的一部分?

好吧,我对此并不十分了解,但是用一个密钥加密的任何东西都可以用另一个密钥解密,并且识别自己与发送数据有点不同..可能有些东西关于一个临时密钥。


谢谢@barlop!请在BamaPookie的答案下方查看我的问题;我对你有同样的问题!
user3178622
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.