方法 1. 带密码的公钥

方法 1. 带密码的公钥

我的问题是:我成功地从系统开发了基于 RSA 密钥的 ssh 登录板。当客户端首次登录时,也会询问私钥和密码,这也可以正常工作。第二次登录时,ssh 不会询问私钥或密码,直接登录板。

客户端使用Ubuntu 16.04并板载定制的Ubuntu。

首次登录使用以下命令:

ssh -i ~/.ssh/id_rsa user@board_ip //工作正常

第二次:

ssh user@board_ip //永远不要询问密码和公钥 -问题

第一次:

ssh user@board_ip //没有密钥就无法登录 - 工作正常

据我了解,我在主板上的 sshd_config 文件中犯了一个错误。我尝试了以下设置,但总是失败。

StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#PasswordAuthentication yes                                            
PermitEmptyPasswords no

项目要求是安全登录,主要在 ssh 上。为了实现更安全的基于 SSH 密码的登录,我们转向基于密钥的登录。如上所述,更改所有配置后。SSH 登录也需要私钥和密码。注销后,过一段时间再次登录,ssh 不需要密钥或密码,项目要求每次都需要密钥和密码。

答案1

有两种方法可以配置ssh为同时需要公钥和密码或密码短语。

密码与口令的区别:

此处的密码是分配给服务器计算机(董事会)中用户的密码。如果董事会只有一个用户帐户,则只有一个密码。如果董事会有多个用户帐户,则每个帐户应有各自的密码。

密码与客户端(本地)计算机中的私钥相关联,而不是与远程服务器(主板)计算机相关联。因此,如果您使用两台不同的设备客户端计算机进行 ssh,则必须为存储在每台本地计算机中的私钥创建密码。同样,如果两个不同的用户需要从各自的本地计算机 ssh 到服务器(主板),他们将需要自己的私钥-公钥对和自己的密码来解锁各自的私钥。

例如,假设你和我需要从我们自己的笔记本电脑 ssh 到同一台服务器计算机(主板)。你将拥有自己的私钥和该私钥的密码。我将拥有自己的私钥及其密码。这种安排的结果是,我可以随时更改私钥的密码,而无需告诉你,也无需更改服务器计算机(主板)的任何内容。我甚至可以从私钥中删除密码,而无需告诉你。

另一种情况是,如果我有多个服务器需要 ssh 连接,并且我使用相同的私钥向所有服务器验证自己的身份,则我需要使用相同的密码来访问我使用的所有服务器中的 ssh,而不仅仅是您的主板。

方法 1. 带密码的公钥

参考:https://help.ubuntu.com/community/SSH/OpenSSH/Keys

步骤 1. 为每个客户端和用户组合向现有的公钥-私钥添加密码

对于每台客户端计算机或设备上的每个用户,使用以下命令为现有的公钥-私钥对生成密码:

ssh-keygen -p

系统将提示您输入保存文件的位置。按回车键接受默认位置。

如果您已经设置了密码,系统会要求您输入现有密码。在这种情况下,您已经完成此步骤。按Ctrl+C停止该过程。

接下来系统将提示您输入新密码。不要按 Enter 键!输入一个长且难猜且容易记住的密码。系统将要求您重新输入密码。

如果您没有现有的公钥-私钥对,请使用以下命令生成它。如果需要,系统将提示您添加密码:

ssh-keygen -t rsa

每次尝试登录 ssh 服务器时,系统都会要求您输入此密码。此密码可能与 ssh 服务器的用户密码不同。每个用户可以拥有自己的密码。如果用户需要从不同的客户端(笔记本电脑、手机等)登​​录,她将需要为每个客户端重复此过程。她可以为不同的客户端选择不同的密码。

第 2 步:仅当密钥是新的时才将公钥复制到服务器

在您的客户端计算机中输入:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@board_ip

它将询问远程服务器中的用户的密码。请记住,必须启用基于密码的登录才能正常工作。

对所有用户和所有客户端设备重复此操作。

步骤 3. 测试是否有效

尝试通过输入以下内容登录服务器:

ssh user@board_ip 

如果一切顺利,系统将提示您输入在步骤 2 中创建的密码。这不是您在步骤 3 中被要求输入的用户密码。

如果您看到提示输入用户密码,则表明有些不对劲。 在您完成这项工作之前,请不要继续下一步。

步骤 4. 禁用基于密码的登录

一旦每个用户及其各自的客户端设备都有自己的公钥-私钥对和各自选择的密码,您就不再需要基于密码的登录。最好禁用此方法。保持启用状态将允许任何没有公钥-私钥对的人尝试猜测 user@board-ip 的密码。

在ssh服务器的board里,编辑文件/etc/ssh/sshd_config,并更改:

#PasswordAuthentication yes

读书:

PasswordAuthentication no

请注意,#第二行中没有 ,而yes现在是no

通过以下方式重新启动服务器中的 ssh 服务:

sudo service ssh restart

如果此方法无效,请重新启动主板。

已完成。密码短语可能由 Gnome-Keyring 缓存在客户端中,直到用户退出本地计算机。因此,每个会话仅询问一次密码短语。

接下来是另一种选择。您需要执行 1 或 2。

方法 2. 需要公钥和用户密码

参考:https://security.stackexchange.com/questions/17931/possible-to-use-both-private-key-and-password-authentication-for-ssh-login

步骤 1. 针对每个客户端和用户组合,从私钥中删除密码(如果存在)

对于每台客户端计算机或设备上的每个用户,使用以下命令删除每个公私密钥对的现有密码:

ssh-keygen -p

系统将提示您输入保存文件的位置。按回车键接受默认位置。

如果您有现有密码,系统会要求您输入。如果没有提示您输入现有密码,则您已完成。按Ctrl+C停止该过程。

否则,输入现有密码并继续。

接下来系统将提示您输入密码。Enter两次从私钥中删除现有密码。

如果您没有现有的公钥-私钥对,请使用以下命令生成它。如果需要,系统将提示您添加密码:

ssh-keygen -t rsa

如果用户需要从不同的客户端(笔记本电脑、手机等)登​​录,她将需要为每个客户端重复此过程。

第 2 步:仅当密钥是新的时才将公钥复制到服务器

在您的客户端计算机中输入:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@board_ip

它将询问远程服务器中的用户的密码。请记住,必须启用基于密码的登录才能正常工作。

对所有用户和所有客户端设备重复此操作。

步骤 3. 测试是否正在使用公钥

尝试通过输入以下内容登录服务器:

ssh user@board_ip 

如果一切顺利,系统不会提示您输入任何密码或密码短语。 这是正常的。这说明公钥已正确安装在 ssh 服务器(主板)中并且正在工作。我们将更改设置,以便它在下一步中再次要求输入密码。

步骤 4. 设置公钥和密码

登录 ssh 服务器(主板)并编辑文件/etc/ssh/sshd_config。在文件中添加以下行:

AuthenticationMethods "publickey,password"

警告:确保看起来PasswordAuthentication像:

#PasswordAuthentication yes

这是默认行为。您可以选择#在开始时保留或删除。但是,如果将此设置no与您刚刚添加的行一起设置为,则没有人能够使用登录到服务器ssh。如果您被锁定,您将必须亲自前往远程服务器,将其连接到键盘、显示器等,然后在本地登录并编辑此文件以解决问题。

结束警告

通过以下方式重新启动服务器中的 ssh 服务:

sudo service ssh restart

如果此方法无效,请重新启动主板。

第 5 步:测试磨合

找到一台新计算机或使用新用户名(例如 user2)登录到客户端计算机。此用户/home/$USER/.ssh/的文件夹中不应有任何公钥-私钥对。我们将假装 user2 是黑客,他以某种方式找到了 user@board_ip 的密码,并尝试通过 ssh 进入该系统。

以 user2 身份从客户端计算机输入:

ssh user@board_ip

如果您仅使用密码即可登录,则此方法无效。任何知道密码或能猜出密码的人都可以登录到论坛。他们不需要密钥。

如果得到一个permission denied并且登录失败,则公钥和密码的双重认证有效。

希望这可以帮助

答案2

问题是这是 Ubuntu 中 SSH 公钥的默认位置。因此,在密钥交换完成后,~/.ssh/id_rsa您无需在 SSH 命令中包含密钥对即可使用。-i ~/.ssh/id_rsaid_rsa

为了避免这种行为,请使用不同的名称创建 SSH 密钥对,然后仅当您使用选项指定它时才会使用它-i

例子:
user_ssh_rsa如果您在用户主目录中 创建名称为该名称的密钥:

ssh-keygen -t rsa -f ~/.ssh/user_ssh_rsa

然后与远程服务器交换密钥,并在提示时输入远程系统上的用户的密码:

ssh-copy-id -i ~/.ssh/user_ssh_rsa user@board_ip

使用以下方式登录:

ssh -i ~/.ssh/user_ssh_rsa user@board_ip

由于使用新创建的密钥,因此无需输入密码即可登录。

使用:

ssh -user@board_ip

由于无法自动找到密钥对,因此将提示输入密码。
这确实取决于是否已删除已共享的密钥~/.ssh/id_rsa

相关内容