有两台 Linux 机器,A 和 B。在 A 上运行的脚本需要能够通过 SSH 连接到 B。因此,A 会生成一个公钥(可能是 -generated ssh-keygen
)id_rsa.pub
,然后使用其各自的私钥(再次,可能是id_rsa
)建立该 SSH 连接。
如果我上面所说的任何内容不正确或具有误导性,请首先纠正我!
假设我或多或少达到了目标:
- A 如何将其公钥“提供给” B(
id_rsa.pub
)?这必须是手动过程,还是可以自动化?如果是手动的,过程是什么?如果是自动化的,命令是什么?当 B“获得”此公钥时,它会去哪里或存储在哪里? - 当启动与 B 的 SSH 连接时,A 如何“使用”其私钥(
id_rsa
)作为该连接的一部分?
答案1
ssh-keygen
生成公钥和私钥,它们最初仅驻留在本地。将公钥提供给另一台主机是用户需要手动执行的操作,要么将其发送给负责服务器 B 的人员,要么如果您有一个带密码的帐户,您可以登录并自己将其放在那里。为了允许无密码登录服务器 B,您需要将您的公钥添加到服务器 B 上的 ~/.ssh/authorized_keys 文件中(每行一个公钥,此文件中可以有任意数量的密钥)。有一个 Linux 命令ssh-copy-id
可以为您复制 ID 并将其放入文件中。
默认情况下,ssh 将使用文件 ~/.ssh/id_XXX 作为您的私钥。XXX 可以是 rsa、dsa 或生成密钥的任何协议。如果我没记错的话,dsa 已经过时了,不应该使用。如果您想使用不同的私钥,您可以在 ssh 命令中使用 指定它-i
。只要使用的私钥与远程计算机上的公钥匹配(在您登录的用户帐户的 authorized_keys 文件中),那么您就不需要提供密码。
答案2
有两台 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 如何将其公钥 (id_rsa.pub) “提供给” B?这必须是手动过程,还是可以自动化?如果是手动的,过程是什么?如果是自动化的,命令是什么?
手动的- 就像是
来自 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 的 authorized_keys 进行 cat 以确保密钥已列出。
或者你可以将 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)作为该连接的一部分?
嗯,我对此了解不多,但用一个密钥加密的任何内容都可以用另一个密钥解密,并且识别自己的身份与发送数据有点不同......并且可能还涉及临时密钥。