前几天我的工作邮箱收到了一封比特币勒索邮件,刚开始看邮件内容的时候我还以为是自己的服务器被劫持了,吓了一跳,不过这次事情之后,倒是让我开始为服务器的安装问题考虑了,第一步就是这篇文章要记录的,关于 Linux 系统设置 SSH 密钥登陆。
(1)首先进入当前用户的用户目录 /home/username
(2)如果用户目录下面不存在一个 .ssh 的目录,那么就创建这个目录,并设置权限为 700
mkdir -m 700 .ssh
(3)进入 /home/username/.ssh 目录并执行如下命令生成密钥
ssh-keygen -t rsa
执行的过程可以一路 Enter 键就行,是否需要按照提示操作看自己的需求
(4)查看生成的公钥和私钥,可以看到 .ssh 目录下命多了两个文件,其中 id_rsa
就是私钥,这个需要下载到本地或者其他需要登陆当前虚拟机的服务器上面;id_rsa.puh
是公钥,这个需要留在当前服务器,相当于一个锁
[alex@CentOS-1 .ssh]$ ll
total 12
-rw-------. 1 alex alex 3243 Jun 9 15:19 id_rsa
-rw-r--r--. 1 alex alex 739 Jun 9 15:19 id_rsa.pub
虽然虚拟机上面生成了公钥和私钥,但是由于 sshd_config
中配置(这个配置项后续会提到)的公钥名称是 authorized_keys
所以需要把之前的 id_rsa.pub
复制一份并命名为 authorized_keys
,这个很简单,在 .ssh 目录下执行复制命令即可:
cp id_rsa.pub ./authorized_keys
服务器上面生成了公钥和私钥之后,需要把私钥下载到本地或者其他需要登陆的服务器上面。下载到本地很简单,直接在自己本地创建一个文本文件,把服务器上面的私钥 id_rsa
中的内容复制到本地并保存即可。
使用 sudo vi /etc/ssh/sshd_config
命令修改 SSH 的配置文件,需要修改如下几个行(没有的需要自行创建)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改完配置之后,需要重启 sshd 服务生效,命令如下:
sudo systemctl restart sshd
服务器上重启完 ssh 服务之后,可以推出登陆,然后在本地使用密钥登陆即可,密钥登陆的方式根据自己使用的软件去使用即可
当本地使用密钥登陆成功之后,继续修改 ssh 配置来关闭密码登陆,具体修改的地方是
PasswordAuthentication no
修改完成之后继续执行 sshd 重启命令,然后可以试一下在本地是否还能用密码登陆,如果不能那就修改好了,至此,SSH 密码登陆就已经修改为仅仅使用密钥登陆,服务器被劫持的概念就降低了很多。
当本地已经登陆成功之后,为了安全起见,可以把服务器上面的私钥和最初的那个公钥删除,不能把 authorized_keys
给删除了。
cd ~/.ssh
rm -f id_rsa id_rsa.pub
一般情况下,默认的 SSH 登录都是使用的22端口,这个端口是公认的端口,所以被攻击的可能性也会比较大,所以如果想要 SSH 更加安全的话,还可以考虑更换一下登录端口,建议使用下面的操作流程来更换端口。
跟修改登录方式一样,还是修改 SSH 的配置文件 /etc/ssh/sshd_config
,修改地方如下(建议先在原有的基础上添加端口,而不是删除22端口)
Port 22
Port 4399
这个修改的意思是先让 SSH 同时支持两个端口登录,这样的好处是可以先使用新添加的那个端口登录试试,如果成功了再把22端口删除,如果失败了,也不至于导致 SSH 连接不上。
修改完配置之后,还是要重启一下 sshd 服务,重启命令就不再说明了。
如果服务器配置了防火墙,那么在修改了 SSH 的端口之后需要开放一下新添加的端口,开放防火墙的端口要根据自己的服务器使用的防火墙服务去操作,由于我的服务器是阿里云的,服务器本地的防火墙是通过阿里云的安全组去设置的,所以只需要在安全组中添加更新的端口即可。
防火墙搞定之后,可以使用新端口进行 SSH 登录,如果登录成功,那么可以再去修改一下配置文件,把22端口的那个配置删除掉,同时把22端口从防火墙中删除掉,这样就做到了仅仅使用新端口进行 SSH 登录。
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处 本文链接:https://tendcode.com/article/ssh-id_rsa/ 许可协议:署名-非商业性使用 4.0 国际许可协议