目前公司有一台公网的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登录的时候,本身就会验证秘钥的啊!怎么还自己做一个?在应用层做?
不知道你这个问题是否已经解决, 如果还没有解决的话:可以通过使用两种身份验证因素来实现ssh双重身份验证,即通过密码和秘钥的组合来进行身份验证。具体的实现方法如下:
首先生成一个新的ssh key,可以使用命令ssh-keygen -t rsa生成一个新的RSA key。在生成时需要注意选择不同的名称以区分现有的秘钥。
为新生成的ssh key设置一个密码,可以使用命令ssh-add将密码添加到key中,或者使用ssh-agent来管理已有的key。
将新的公钥添加到目标机器的authorized_keys文件中,可以使用scp或者rsync命令来完成此操作。
在本地ssh客户端上设置IdentityFile参数以指定使用新的ssh key进行登录。该参数可以在ssh配置文件(~/.ssh/config)中设置,或者在运行ssh命令时手动指定。
下面是具体的操作步骤:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/my_key
该命令会生成一个大小为4096位的RSA秘钥,并将私钥保存到~/.ssh/my_key,公钥保存到~/.ssh/my_key.pub。在生成秘钥时会提示设置密码,可以输入并确认一个密码保护该秘钥。
ssh-copy-id -i ~/.ssh/my_key user@remote_host
该命令将公钥添加到目标机器上指定用户的authorized_keys文件中。需要替换user和remote_host为实际的用户名和目标机器的主机名或IP地址。
在~/.ssh/config文件中添加以下内容:
Host remote_host
IdentityFile ~/.ssh/my_key
该配置指定在连接到remote_host时使用新生成的ssh key进行身份验证。需要替换remote_host为实际的主机名或IP地址。
ssh user@remote_host
该命令应该提示输入密码和秘钥密码,然后成功登录到目标机器上。如果未提示输入秘钥密码,则需要使用ssh-agent来管理秘钥。
需要注意的是,如果需要在多台机器上使用双重身份验证,还需要在每台机器上重复以上操作。