今天登录前段时间买的VPS,发现motd消息中有一段如下:
There were 405 failed login attempts since the last successful login |
基本过几个小时再登录就有这个消息,小的几百次失败登录尝试,多个可能几千次,看来网络上真的是错综复杂,不安全呐,整天有人想着办法要“勾搭”互联网上的server。没办法只好配置一下SSHD,要不这么一天到晚被尝试登录也受不了。
如果是购买的远程主机建议配置到普通用户的密钥登录,关闭root登录权限和密码登录权限,最好把sshd的端口改了,因为大部分尝试登录都是针对默认端口22的。下面是操作步骤。
因为是远程主机所以操作要按照一定的顺序,要不然可能导致不能登录,注意的是在配置过程中不要退出已登录的回话,直到配置完再退出最初的会话。
创建新用户
用现在的用户名密码登录到服务器,这个session不要关闭,中间对sshd的配置及sshd服务重启不会断开这个连接的。
useradd me |
这里假设已经编辑 visudo 将wheel用户组设置为拥有 sudo 权限。如果还没有的话使用 sudo visudo
找到相应的行取消注释即可,注意千万不要手动编辑 /etc/sudoers
文件,以前同学手动编辑该文件导致的惨烈后果记忆犹新。。。。
配置无密码登录
我们都知道要实现无密码登录就是在本地生成一个密钥对,然后使用用户名密码将公钥(.pub)上传到服务器,然后登陆时指定对应的私钥,就不需要输入密码了。
生产密钥对
使用下面的命令
ssh-keygen -t rsa -f me.server |
-t表示密钥使用的算法, -f是生成的密钥对的文件名,默认回事id_rsa,不过为了和其他服务器的密钥对区分,建议使用一个直观的名字,而不是默认名字,上面的指令会询问是否使用密码,这个密码是密钥对使用的密码,建议使用一个简单的密码,这样比没有密码安全很多,也不会有额外的记忆负担
Enter passphrase (empty for no passphrase): |
然后回车后就会在 ~/.ssh/
目录下生产两个文件,分别是 me.server
和 me.server.pub
它们分别是私钥和公钥文件。
上传公钥到服务器
很多人喜欢使用手动上传文件拷贝内容到服务器的 ~/.ssh/authorized_keys
文件中,这样很麻烦也容易出错,其实有一个非常方便的工具 ssh-copy-id
命令专门用来上传公钥,使用可以查看帮助,一般如下:
ssh-copy-id -i ./me.server.pub -p your_port me@host |
使用 -i
指定公钥文件,否则默认使用 id_rsa.pub 就不对了,是哟个 -p
指定sshd的端口,现在我们还没有修改服务端的端口就使用默认端口22或者不写就可以了,最后是用户名和服务器地址。
这个指令会询问登录密码,输入密码就可以了,指令会自动将公钥上传到服务器,并将内容追加到指定用户的 ~/.ssh/authorized_keys
文件中,你可以在服务器中查看该文件
使用私钥登录
在ssh登录时指定私钥文件可以配置 ~/.ssh/config
文件指定某个域名的私钥,或者在ssh命令指定私钥文件。ssh/config 配置格式如下:
host alias |
这样配置的好处是可以为连接自定义一个别名,在连接时指定这个别名如: ssh alias
就可以了。
或许使用 -i
参数指定密钥文件:
ssh -i ~/.ssh/me.server -p 22 me@host |
修改sshd服务配置
sshd的配置文件是 /etc/ssh/sshd_config
,主要做下面几个配置修改
- 禁止root用户登录, 找到
PermitRootLogin
配置,取消注释,将其值修改为no
- 修改登录端口,在配置文件中寻找
Port
修改为另一的端口,注意不要与其它常用端口冲突,可以设置到10000以上的端口 - 禁止密码登录,完全禁止使用密码登录,这样那些尝试暴力登录的工具就完全没有办法了,找到
PasswordAuthentication
的配置项,将其值修改为no
保存退出后,重新启动服务: sudo systemctl restart sshd
或者 sudo service sshd restart
注意:
- 修改了默认登录端口后记得修改客户端 ssh 的config文件中配置的端口要相应修改
- 修改了端口之后一定要记得打开防火前对应的端口,否则以后就登录不了了:
sudo iptables -L |
这样更新iptables的规则后就可以指定新端口登录了。
Windows下使用 Xshell 可以保存指定 rsa 私钥和passphrase,登录也很方便。
完。
参考: