linux 如何实现ssh登录的时候,客户端要提供秘钥文件和密码双重验证才能登录成功

目前公司有一台公网的dmz机器,非常重要,但是怕被ssh暴力破解密码,我想的是通过ssh登录的时候,先验证秘钥,然后验证密码,在网上试过很多中方法,仍然不行,求相关资料

来自chatgpt的回答 :
要实现客户端在使用ssh登录时需要提供秘钥文件和密码双重验证,可以通过以下步骤来完成。

在服务器端设置双重验证方式:打开 /etc/ssh/sshd_config 文件,并添加以下两行代码:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password
这样就允许使用双重验证方式进行ssh登录。

生成密钥文件:在客户端使用 ssh-keygen 命令生成公钥和私钥。可以使用默认路径,输入命令后一路回车即可。生成后会在用户主目录下生成 .ssh 文件夹,并存放公钥和私钥文件。其中,公钥文件名为 id_rsa.pub,私钥文件名为 id_rsa。

复制公钥到服务器上:使用以下命令将公钥复制到服务器上,将 user 替换成自己的用户名以及 server_ip 替换成服务器的IP地址。

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
设置本地ssh代理:在客户端打开终端,输入以下命令,启动ssh代理。
ssh-agent bash
ssh-add ~/.ssh/id_rsa
此时,会要求输入私钥文件的密码,输入后代理就启动成功了。

使用ssh登录:执行以下命令进行ssh登录,将 user 替换成自己的用户名以及 server_ip 替换成服务器的IP地址。
ssh user@server_ip
这样就会先要求输入私钥密码,验证成功后再要求输入登录密码。只有两者都验证通过,才能成功登录服务器。

ssh登录的时候,本身就会验证秘钥的啊!怎么还自己做一个?在应用层做?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7457376
  • 以下回答来自chatgpt:

    可以通过使用两种身份验证因素来实现ssh双重身份验证,即通过密码和秘钥的组合来进行身份验证。具体的实现方法如下:

    1. 首先生成一个新的ssh key,可以使用命令ssh-keygen -t rsa生成一个新的RSA key。在生成时需要注意选择不同的名称以区分现有的秘钥。

    2. 为新生成的ssh key设置一个密码,可以使用命令ssh-add将密码添加到key中,或者使用ssh-agent来管理已有的key。

    3. 将新的公钥添加到目标机器的authorized_keys文件中,可以使用scp或者rsync命令来完成此操作。

    4. 在本地ssh客户端上设置IdentityFile参数以指定使用新的ssh key进行登录。该参数可以在ssh配置文件(~/.ssh/config)中设置,或者在运行ssh命令时手动指定。

    下面是具体的操作步骤:

    1. 使用ssh-keygen命令来生成一个新的ssh key:
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_key
    

    该命令会生成一个大小为4096位的RSA秘钥,并将私钥保存到~/.ssh/my_key,公钥保存到~/.ssh/my_key.pub。在生成秘钥时会提示设置密码,可以输入并确认一个密码保护该秘钥。

    1. 将公钥添加到目标机器上的authorized_keys文件中:
    ssh-copy-id -i ~/.ssh/my_key user@remote_host
    

    该命令将公钥添加到目标机器上指定用户的authorized_keys文件中。需要替换user和remote_host为实际的用户名和目标机器的主机名或IP地址。

    1. 在本地ssh客户端上设置IdentityFile参数:

    在~/.ssh/config文件中添加以下内容:

    Host remote_host
    IdentityFile ~/.ssh/my_key
    

    该配置指定在连接到remote_host时使用新生成的ssh key进行身份验证。需要替换remote_host为实际的主机名或IP地址。

    1. 使用ssh命令测试双重身份验证是否正常工作:
    ssh user@remote_host
    

    该命令应该提示输入密码和秘钥密码,然后成功登录到目标机器上。如果未提示输入秘钥密码,则需要使用ssh-agent来管理秘钥。

    需要注意的是,如果需要在多台机器上使用双重身份验证,还需要在每台机器上重复以上操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^