警告!

警告!

我一直在尝试遵循本教程:本教程,但一直卡在通过公钥登录(无密码提示)的环节。我对 unix 命令行还不太熟悉。

我的情况是,我正在运行一个 php 脚本(ssh2),并在通过 ssh 成功连接后运行以下命令。

ssh -f -L 3307:127.0.0.1:3306 [email protected] sleep 60 >> logfile

以下是本教程中我无法理解的部分。我尝试过使用 ssh-keygen 并将公钥/私钥存储在我的 /home/someuser/.ssh/authorized_keys 和 authorized_keys.pub 文件中。但无济于事 :(,感谢您的帮助。

避免密码提示:通常,在发出类似上述命令后,您将收到密码提示,以验证登录远程计算机的用户。同样,这对自动化不利,因为让应用程序与命令行提示符交互(或存储纯文本密码)从来都不是一个好主意。在这种情况下,公钥加密再次派上用场。如果远程用户的公共证书存储在登录的远程用户帐户的 ~/.ssh/authorized_keys 文件中,SSH 将不会提示输入密码。我们只需将公钥附加到此文件,密码提示就不再是问题了。

答案1

不,没有 ~/.ssh/authorized_keys.pub 文件,不要将您的私钥放在 authorized_keys 中!您的私钥应该只放在生成的文件中,而不能放在其他地方(也许只是备份)。

您需要做的是,首先在您将启动 ssh 命令的本地主机上使用 ssh-keygen 创建密钥,您可以根据需要使用或不使用密码,但请记住,任何获得此私钥而无需密码的人都可以登录。所以请保留它私人的

然后在您想要使用此密钥登录的远程主机上,将生成的密钥 id_dsa.pub 的公共部分(或您获得的名称)放入 ~/.ssh/authorized_keys 中。

这样就可以了。请记住,由于 ssh 强制执行安全性,因此文件权限非常重要。请阅读

man ssh

答案2

令人惊讶的是没有提到 ssh-copy-id - 这让事情变得简单。

ssh-copy-id [email protected]

答案3

我知道你的意思。我认为 openssh.org 上的说明非常模糊。简单版本如下:

从客户端计算机上将通过 ssh 连接到 remote.server.com 的用户开始。在那里运行 ssh-keygen。当它要求您输入密码时,只需按 Enter 即可。

将文件 .ssh/id_rsa.pub(或 id_dsa.pub,取决于您的加密类型)复制到 remote.server.com,然后将此文件的内容附加到 ~someuser/.ssh/authorized_keys。您也可以编辑此文件,然后将 id_rsa.pub 的内容粘贴到 authorized_keys 的末尾。

通过从客户端计算机(以运行 ssh_keygen 的用户身份)进行 ssh 测试[电子邮件保护]。它不应该要求您输入密码。如果要求,则可能存在一些权限问题(~someuser/.ssh 和 ~someuser/.ssh/authorized_keys 上的权限应为 600)或其他问题,这些问题将被 remote.server.com 上的日志捕获。您还可以在调试模式下(sshd -d)在 remote.server.com 上运行 ssh 服务器,以查看它在做什么。

警告!

由于您未在此密钥上使用密码短语,因此请确保您不会与任何其他人共享此公钥。如果您在此初始设置后收到有关主机密钥指纹或“中间人”攻击的错误,拒绝连接到该服务器!任何自动化任务都会因此类错误而失败,并且不会发送公钥。唯一需要费力解决此类错误的合法情况(openssh 客户端会向您提供有关如何执行此操作的说明)是服务器上的密钥指纹发生变化,通常是由于该服务器上的 SSH 升级所致。如果您不是远程服务器的管理员,请在更改主机密钥数据库之前直接联系该人员并询问其服务器上是否有任何更改。

相关内容