我在 2 个不同的主机上有 2 个 shell 帐户:
- shell A: shell 我想使用 SSH 密钥登录 (server-A.com)
- shell B:我用来登录 A 的 shell,无需密码,但使用 SSH 密钥 (server-B.com)
我给 server-A.com 系统管理员发了电子邮件,他给了我以下教程 URL。
我做了以下事情:
- 使用在 server-A.com 上创建私钥/公钥 SSH 密钥,并将私钥放在 server-B.com 上
ssh-keygen -t rsa -C [email protected]
~/.ssh/server-B.com
- 我跑了
chmod 700 ~/.ssh/
然后chmod 600 ~/.ssh/server-B.com
我将 server-A.com 公钥添加到
~/.ssh/authorized_keys
server-B.com 上$ cat ~/.ssh/server-B.com.pub >> ~/.ssh/authorized_keys # on server-B.com
我已经检查过
~/.ssh/config
(否)并且/etc/ssh/ssh_config
其中包含以下内容(未打印其他#注释行)# PasswordAuthentication yes SendEnv LANG LC_* HashKnownHosts yes GSSAPIAuthentication yes
来自外壳 B:
$ ssh-keygen -f "/home/username/.ssh/known_hosts" -R server-A.com
笔记:我按照教程进行操作https://kb.iu.edu/d/aews和https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-openssh/。
什么地方出了错?
答案1
您只需要私钥即可B
登录A
。不要在远程A
系统上生成密钥。远程系统不需要知道您的私人身份。
您想要A
从 登录系统B
。这意味着~/.ssh/authorized_keys
在A
系统上应包含公钥(以允许您输入)。系统B
在本地不需要此文件来登录A
。
请注意,您必须确保~/.ssh
两台主机上的 都具有700
权限,并且其中的文件具有600
权限(包括~/.ssh/authorized_keys
on A
)。
另外,实际上使用~/.ssh/server-B.com
要B
登录文件中的密钥A
,您必须使用ssh
as
ssh -i ~/.ssh/server-B.com [email protected]
或者,启动ssh-agent
并添加密钥:
eval "$( ssh-agent )"
ssh-add ~/.ssh/server-B.com
ssh [email protected]
或者,在系统中添加一个~/.ssh/config
条目B
,A
例如
Host A
User a-user
Hostname server-A.com
IdentityFile %d/.ssh/server-B.com
然后使用
ssh A
您也可以只使用默认密钥文件的名称,除非您已有其他私钥。
答案2
好吧,你并没有全部搞错,只是部分搞错了。
要在 SSH 中通过公钥(加密)使用客户端身份验证:
您必须拥有私钥文件客户- 您的B。
最佳实践是产生客户端上的密钥。不推荐您所做的,在服务器上生成并复制,但会起作用。
最佳实践是在客户端上使用标准文件名(取决于“类型”又名算法)——
~/.ssh/id_rsa
对于 RSA(v2 中)、~/.ssh/id_ecdsa
ECDSA 等,ssh-keygen
如果在客户端上运行,则默认情况下会执行此操作。像您一样使用不同的名称意味着您必须在每次运行时指定文件名ssh
,例如ssh -i ~/.ssh/server-B.com user@host [command...]
,或者设置您的配置文件以将其指定为您的IdentityFile
(全局或特定主机)。其他用户必须无法访问私钥文件。 AFAICS 你
chmod
说得对。你把公钥放在
~/.ssh/authorized_keys
ON THE服务器——你的A。使用
cat >>
通常很好,因为它保留任何现有内容并附加新行。如果存在(您确定)已过时的现有行(对于不再使用或授权的密钥或用户),您可能需要删除它们以保持整洁,但这不是必要的。并且该
authorized_keys
文件必须不能被其他用户写入。这可能是也可能不是您系统上的默认设置;如果没有,请chmod
按照与密钥文件相同的方式使用。known_hosts
仅当以下情况时才需要从客户端 (B) 上的文件中删除服务器 (A) 的条目:服务器密钥已更改或已废弃。它与客户端身份验证无关。不必要地这样做,如果您在下次询问时不小心手动检查服务器密钥指纹,可能会为攻击者拦截、窃取和更改您的数据提供机会。
因此,如果您修复authorized_keys
服务器 (A) 并ssh -i ~/.ssh/server-B.com user@serveraname
在客户端 (B) 上运行,并且如果要求验证服务器指纹,则它应该可以工作。如果没有,请-v
按照 Haxiel 的评论运行多个选项以获取详细信息。特别是如果它似乎没有看到指定的密钥文件(又名身份文件),请使用 重新检查权限ls -l
。
答案3
主机上的文件 /etc/ssh/sshd_config 中应该有一个公钥身份验证选项。取消注释并设置为 yes
确保您正在主机上编辑 /etc/ssh/sshd_config,而不是 /etc/ssh/ssh_config。第二个文件仅供客户使用
如果需要,请联系主机A的管理员