ssh服务的原理和配置
一、概述
SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题。
二、主要功能
- 提供类似telnet远程联机服务器的服务,但是它比telnet安全
- 类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务
三、SSH服务
SSH服务默认端口是22,安全协议版本sshv2,SSH服务端是一个守护讲程 (daemon),他在后台运行并响应来自客户端的连接请求。 SSH服务端的讲程名为sshd,负责实时监听远程SSH客户端的远程连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。SSH客户端包含ssh以及像scp(远程拷贝) slogin(远程登陆) sftp(安全FTP文件传输)等应用程序。它属于linux系统开机自启的服务之一。
四、openssh软件
openssh是实现SSH协议的开源软件项目,适用于各种unix、linux操作系统。openssh是由openssh、openssh-server以及openssh-client等软件包提供的,并已将sshd添加为标准的系统服务,默认系统已安装。
五、主要配置文件
- /etc/ssh/sshd_config #ssh服务端配置文件
- /etc/ssh/ssh_config #ssh客户端配置文件
六、基本配置
本节配置都在SSH服务器端的配置文件/etc/ssh/sshd_config中配置
配置文件修改完以后必须重启或重载服务,以下省略该步骤
配置参数不区分大小写!!!如LoginGraceTime=logingracetime
sshd -t
#检查配置文件语法,没错就无任何输出,有错会报错
1、改变默认端口
Port
#SSH监听端口,默认是22
修改过端口号之后启动服务必须把selinux关掉或者setenforce 0才行!!!
2、认证时限
LoginGraceTime
#登录认证时超过多长时间就禁止登录了
注意:这里如果输入密码慢了或者走开了它是不会自动断开的,这里设置5秒的意思是如果5秒之后你才输完密码,即使密码正确它也不给你登录了!
3、禁止root登录
为什么要禁止root登录?因为root的权限最大,如果允许的话,可以登录到对方服务器进行任意操作,非常不安全!!!
PermitRootLogin
#允许root登录,一般设置为no
为了不给普通用户利用跳板随意切换成root用户,我们需要设置pam认证模块
这里有2个用户:gulf(普通用户)和shengjie(属于wheel组的特权用户)
使用gulf登录,无法切换为root
使用shengjie登录,可以切换为root
有人又说了,既然我知道shengjie可以切换为root那我先用gulf登录再切换为shengjie行不行,答案是不行。也没有实际意义,你必须知道shengjie的密码,但是既然知道密码也就不用切换直接就已shengjie登录就好了
注意:在wheel组的用户的权限是比普通用户要大的,它是linux默认的特权组。
4、认证尝试次数
MaxAuthTries
#最大认证尝试次数
默认连接输错密码3次就退出了,原因是因为客户端配置有一项NumberOfPasswordPrompts参数
man手册里它的定义是:Specifies the number of password prompts before giving up.
The argument to this keyword must be an integer.
The default is 3.(指定放弃密码提示的次数。此关键字的参数必须为整数。默认值是3。)
所以我们只能尝试登3次,这里是指客户端的尝试次数,服务器的是认证次数,服务器能认证几次取决于客户端能登陆几次,概念容易混淆!
man手册位置:/usr/share/man/man5/ssh_config.5(需要解压)
ssh -o NumberOfPasswordPrompts=5 gulf@192.168.100.141
#设置客户端登录时密码提示的次数
所以我们要验证服务器上MaxAuthTries参数,就必须把客户端NumberOfPasswordPrompts参数的值设为比6大的数,我们设为8,结果如下
第二种方法:(修改完成需要重启sshd服务)
5、黑、白名单
(1)设置白名单AllowUsers
AllowUsers gulf tom@192.168.100.10
#允许gulf用户从任何地方登录,只允许tom从指定终端登录,2个条件之间用空格分隔
(2)设置黑名单DenyUsers
DenyUsers gulf
#拒绝gulf登录
总结:
- 如果黑白名单只设置其中一个,那就匹配这一个,其他不匹配,如果同时设置黑白名单,它会匹配黑名单!
- 在实际生产环境中,建议只做白名单,考虑安全性问题,不能随意让别人远程,只放开你信任的用户即可!