Centos7服务器配置笔记-2ssh服务端配置
Centos7服务器配置笔记-2ssh服务端配置
简述
服务器一般都是采用远程登录来管理,在windows上,我们基本上都是用远程桌面来管理。linux用得不多,之前也尝试用过桌面环境来管理,发现桌面环境最大的优势在于可视化操作,很多时候,就算你不清楚命令,也能完成你想做的事。但桌面环境也有比较大的缺点,一个是相对字符终端资源耗费要多不少,二是x会话用下来不是太稳定,崩溃卡死这种状况也是时有发生。所以现在考虑还是直接用字符终端来管理。一般是通过ssh远程登录到一个虚拟字符终端进行操作。
ssh 服务端配置
黑客对ssh登录破解也是非常频繁的。其中root帐号尤其是重灾区(因为帐号不用猜了,只要猜密码就可以了)。解决办法一般不外乎以下几种:
- 禁用root远程登录
- 修改默认22端口
- 限制22端口能访问IP地址
- 不使用密码,改用密钥访问。
- 密码输错超过指定次数后封IP
阿里云自带防火墙,但默认防火墙对22端口是全开放的,对于只在公司办公的用户,其实可以采用第3种方式,通过防火墙将能访问的IP限制在本公司的公网IP段内。当然,centos自带的防火墙firewall也是有这功能的。前四项在ssh的服务端配置文件里进行配置。其实个人觉得只要改成用密钥访问,就能杜绝多数攻击了。不过配置的时候还是把各种方式都玩了一下,下面就说明一下配置文件要改的地方。默认 SSH服务提供程序为openssh server,他的配置文件为在 /etc/ssh/sshd_config,纯文本,里面多数内容都被注释了,并写了一些简要的说明。
如果我们要开启密钥方式登录,并关闭密码方式登录,需要改的是以下几行内容(注意,如果前面有注释,一定要把注释去掉)
UseDNS no #仅用dns反向查找,可大大提高登录连接速度
#关闭GSSAPI验证,提高连接速度
GSSAPIAuthentication noProtocol 2 #仅使用ssh-2版本协议,增强安全性
#开启公验证
PubkeyAuthentication yes #是否允许公钥认证。仅可以用于SSH-2。默认值为”yes”。#禁用密码验证方式
PasswordAuthentication no#这个好像也要设置为no,不然可能还是可以用密码方式登录
ChallengeResponseAuthentication no
上面的是比较简单的配置,如果要配置的复杂一些,可能就要用到Match指令,下面是一个相对复杂的配置:
#设置root用户只能从指定地址访问(下面的IP都是伪造的),并且只能使用密钥方式进行验证登录
Match Address 161.192.37.71,161.192.37.35,161.192.37.196 User root
PermitRootLogin yes
PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AllowUsers root
#允许 "ssh-login-users" 组用户从任意地方登录,并且登录方式也没做限制
Match Group ssh-login-users
PasswordAuthentication yes
RSAAuthentication yes
PubkeyAuthentication yes
AllowUsers *
Match指令组合在一起后可以做非常精致的定制,有兴趣的朋友可以访问文末参考资料,这里只做一个简单的说明引用
Match
引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾。
如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。
Match 的值是一个或多个”条件-模式”对。可用的”条件”是:User, Group, Host, Address 。
只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner,ForceCommand, GatewayPorts, GSSApiAuthentication,
KbdInteractiveAuthentication, KerberosAuthentication,
PasswordAuthentication, PermitOpen, PermitRootLogin,
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
X11Forwarding, X11UseLocalHost
如果要修改ssh默认端口,需要修改sshd_config文件中下面这一行
Port 2222 #将端口改成2222
#下面是监听地址,一般不需要动,默认就是注释掉的
#ListenAddress 0.0.0.0
#ListenAddress ::
配置完成后保存,并重启sshd服务
systemctl restart sshd
可以再看一下重启后的状态
systemctl status sshd
sshd_config配置详细可参考文末参考sshd_config配置 详解
ssh 客户端配置
ssh有很多客户端可以选择,我这里主要用了putty和winscp,其中putty主要是用于登录终端进行各类操作,winscp则主要提供图形化的文件操作功能。
如果服务端ssh配置是通过密码来认证,那个putty和winscp基本上不需要做啥特殊的处理,在用户名、密码、主机的位置填入相应的值,直接连接就行了。(winscp有内置的直接调用putty的按钮)。
下面主要叭一下服务端ssh配置是通用密钥来认证方式的配置方法。
密钥认证相对密码认证,我理解最主要的好处是在于密钥的位数是很长的,标准的RSA加密长度为2048位,这个大大增加了暴力破解的难度。至于密码方式需要输入,而导致实际操作时容易被别人窥探这类好处,其实在现有多数客户端软件中是不存在的,像winscp这类软件都提供保存密码功能,是不存在这类问题的。如果用户自己的机器被黑,那不管是用密码还是用密钥,都是差不多的结果。
ssh密钥认证需要在服务器用户home目录中的指定文件中添加一个公钥。自己保存私钥。下面简单讲述一下过程:
生成密钥对
生成方法有很多,如果手头有linux系统,直接在终端输入 ssh-keygen -t rsa,按钮系统提示进行操作(建议在Enter passphrase 项时输入密钥保护密码,以提高密钥的安全性)就会在当前用户目录(~)中的.ssh目录中生成id_rsa和 id_rsa.pub两个文件,id_rsa就是私钥,自己保存;id_rsa.pub就是公钥,要复制到服务器上。
配置ssh服务器
服务端主要配置工作为将公钥放入你要登录的帐户家目录下指定文件中。例如,你在服务器上的用户名是kitty,那么你第一步把id_rsa.pub复制到服务器 /home/kitty/.ssh/目录中,然后往 /home/kitty/.ssh/authorized_keys 文件中添加你的公钥(如果没有该文件就新建一个,并设置属性为仅自己可读写chmod 600 authorized_keys),
一般添加公钥常用命令是 cat id_rsa.pub>>authorized_keys 。
添加完成后重启ssh服务: systemctl restart sshd
配置ssh客户端
客户端以putty为例说明,详细操作可参考设置Putty SSH使用密钥登录Linux VPS主机
首先,putty与linux的密钥格式有一定区别,所以先要把私钥转换成putty支持的私钥格式。
打开putty.exe同目录下的puttygen.exe程序,在主界面中选择load按钮,加载一个私钥文件,在打开文件对话框中,选择id_rsa文件(如果你在生成密钥对时设置了私钥密码,这时会提示你输入密码),打开私钥文件。再点击save private key,将私钥另存为ppk为后缀的私钥文件(如id_rsa.ppk)。私钥转换格式完成。
打开putty,在Connection->SSH->Auth页中,在private key file for authentication中选择上一步转换的私钥文件。
然后切换到在session页,填入相应host地址,port,和session名称(saved sessions 标题下的文本档内),单击save按钮,将session保存,下次登录时,选择该session即可以以密钥方式登录服务器了。
参考资料
[1].sshd_config配置 详解
[2]. CentOS/Linux 解决 SSH 连接慢
[3].设置Putty SSH使用密钥登录Linux VPS主机