简介:

SSH 为 secure shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

基本功能:

1.首先我们开启两台Linux系统,一台作为服务端,一台作为客户端。我们先用vim编辑器对ssh服务端配置文件“/etc/ssh/sshd_config”进行编辑。

Linux系统SSH服务详解
Linux系统SSH服务详解

Port 22                                          监听端口,默认监听22端口  
#AddressFamily any                     IPV4和IPV6协议家族用哪个,any表示二者均有
#ListenAddress 0.0.0.0                 指明监控的地址,0.0.0.0表示本机的所有地址 
#ListenAddress ::                           指明监听的IPV6的所有地址格式

Linux系统SSH服务详解

#LoginGraceTime 2m                 会话时间,默认2分钟则自动断开连接
#PermitRootLogin yes                是否允许管理员直接登录,'yes'表示允许
#StrictModes yes                         是否让sshd去检查用户主目录或相关文件的权限数据
MaxAuthTries 6                           最大认证尝试次数,最多可以尝试6次输入密码。
#MaxSessions 10                        允许的最大会话数
(将“#”删除即可开启相应功能)

2.配置完毕记得重启服务才会生效,我们用客户端尝试连接一下服务端。

Linux系统SSH服务详解
我们直接输入用来的登录的用户root(注意是服务端用户)和服务端IP地址即可,然后输入用户密码即可登录。我之前登陆过,如果没有登陆过,系统会问你是否想连接,你只需输入“yes”即可。
Linux系统SSH服务详解
如果客户端的用户名和服务端的用户名相同,登录时可以省略用户名。
Linux系统SSH服务详解
SSH服务的默认端口是22,如果你不设置端口的话,登录请求会自动送到远程主机的22端口。如果我们在配置文件里修改了端口号,我们可以使用 -p 选项来指定端口号。例如端口改为了123:
Linux系统SSH服务详解

3.我们知道root用户是系统的管理员,如果别人能够随意登录肯定是不安全的。所以我们可以通过修改配置文件,不让别人通过root用户登录。修改完记得重启服务。

Linux系统SSH服务详解
Linux系统SSH服务详解
我们再次用root用户登录,输入密码后显示权限拒绝,而换成zhangsan用户又可以登录了。
Linux系统SSH服务详解
4.虽然我们限制了使用root用户登录,但是当我们用zhangsan用户登录了,用“su”命令任然可以切换到root用户。

Linux系统SSH服务详解

所以我们可以开启“su”命令的PAM安全认证功能,我们只要将允许用“su”命令的用户添加到“wheel”组即可。
Linux系统SSH服务详解
Linux系统SSH服务详解

可以看到用户“jiang”在“wheel”组中,用户“zhangsan”不在。我们再用“zhangsan”用户切换root用户已经显示权限拒绝,而在“wheel”组用户“jiang”任然可以切换root用户。
Linux系统SSH服务详解
Linux系统SSH服务详解

5.前面我将最大认证尝试次数6次数开启了,我们可以测试一下是否成功。
可以看到当我们尝试了6次,就自动被断开连接了。但是我们得用“-o NumberOfPasswordPrompts=8”选项才能测试成功,如果直接输入,还是默认3次就会断开连接。
Linux系统SSH服务详解
Linux系统SSH服务详解

6.我们还可以通过在服务端配置文件里添加黑白名单来限制登录的用户和IP地址。

黑白名单不能同时存在,一般企业中多用白名单,下面以白名单为例演示。
首先我们在配置文件中添加白名单,限制zhangsan用户只能在ip为192.168.52.132的主机上进行登录,lisi用户可以在任意主机上进行登录。配置完成要重启服务。

Linux系统SSH服务详解
我们在ip为192.168.52.132的主机上登录时,可以看到由于设置了白名单,用户“jiang”不在名单里所有已经不能登录了,而zhangsan与lisi用户任然可以登录。

Linux系统SSH服务详解
我们在ip为192.168.52.128的主机上登录时,只有lisi用户可以登录,zhangsan用户不能登录,因为我们限制了zhangsan用户只能在ip为192.168.52.132的主机上进行登录。
Linux系统SSH服务详解

scp命令与sftp命令

1.我们将之前设置的白名单删除,允许root用户登录改为“yes”,并重启服务。

Linux系统SSH服务详解

2.首先在client主机的“/opt/”目录,新建一个文件“ssh_client.txt”和一个目录“ssh”,然后用scp命令将它们都复制到server主机的“/opt/”目录下。

Linux系统SSH服务详解
Linux系统SSH服务详解

3.再在client主机的“/opt/”目录下,创建一个文件“test01”,然后在“server”主机用scp命令将文件复制过来。

Linux系统SSH服务详解
Linux系统SSH服务详解

4.我们将之前在两台主机“/opt/”目录下新建的目录和文件删除,分别在server与client的“/opt/”目录下创建两个文件demo01、demo02。
Linux系统SSH服务详解
Linux系统SSH服务详解

5.我们在client主机用sftp命令也可以登录server主机进行文件的上传和下载。上传用“put”命令,下载用“get”命令,同时我们还可以用cd命令进行目录的切换。

Linux系统SSH服务详解

6.可以看到我们可以用cd命令随意切换目录,这样很不安全,所以我们可以通过对ssh服务端配置文件进行修改,将sftp命令连接后限制在我们指定的目录里。

首先用vim编辑器对文件“/etc/ssh/sshd_config”进行编辑,将“Subsystem sftp /usr/libexec/openssh/sftp-server”注释掉。然后添加下面的命令:

Subsystem  sftp  internal-sftp
Match User zhangsan
ChrootDirectory /home/zhangsan
X11Forwarding no
ForceCommand internal-sftp
AllowTcpForwarding no
(配置完别忘了重启服务)

Linux系统SSH服务详解

然后我们进入“/home/”目录,将我们指定的目录“zhangsan”的权限设为“755”,属主、属组均改为root。

Linux系统SSH服务详解

我们再“/home/zhangsan/”目录下,新建5个空文件。
Linux系统SSH服务详解

我们再次用client主机,通过sftp连接server主机,可以看到我们直接就登录到“zhangsan/目”录中了。当我们想切换到别的目录时,都不能成功。
Linux系统SSH服务详解

密钥对登录

1.将之前的限制sftp登录切换目录的配置修改回来,开启密钥对登录功能(删除#即可),并重启服务。

Linux系统SSH服务详解
Linux系统SSH服务详解
Linux系统SSH服务详解

2.首先用“ssh-keygen -t ecdsa”命令生成密钥对,将密钥文件存在“/home/zhangsan/.ssh/”目录中。

Linux系统SSH服务详解

3.用命令“ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.52.131”将目录“/home/zhangsan/.ssh/”下的公钥文件“id_ecdsa.pub”导入到server主机。
Linux系统SSH服务详解

4.当我们再次用ssh命令登录时,这是只要输入之前的密钥即可。

Linux系统SSH服务详解

5.但是我们每次登录都得输入密钥会很麻烦,此时我们只要用bash代理,添加密钥即可,我们下次登录就不用输入密钥了。

Linux系统SSH服务详解

TCP Wrappers策略

控制策略的配置文件:

  • /etc/hosts.allow(白名单文件)
  • /etc/hosts.deny(黑名单文件)

策略的应用顺序:

  • 先检查hosts.allow文件,找到匹配则直接允许访问,不再检查hosts.deny文件;
  • 若hosts.allow文件中没有,再检测hosts.deny文件,找到则拒绝访问;
  • 若两个文件中均无匹配策略,则默认允许访问。

1.先用vim编辑器对文件“/etc/hosts.allow”进行编辑,添加一个白名单ip192.168.52.132。

Linux系统SSH服务详解
Linux系统SSH服务详解

2.再用vim编辑器对文件“/etc/hosts.deny”进行编辑,将所有ip设为黑名单。

Linux系统SSH服务详解
Linux系统SSH服务详解

3.下面我们用ip为192.168.52.132的主机client和ip为192.168.52.128的主机client02分别进行登录,只有白名单里的client主机可以登录。
Linux系统SSH服务详解
Linux系统SSH服务详解

4.将白名单中的client主机ip删除,加入到黑名单中,再用client主机去登录,结果不能登录。
Linux系统SSH服务详解
Linux系统SSH服务详解
Linux系统SSH服务详解