目录
SSH远程登录协议
SSH服务
ssh(secure Shell )是一种安全通道协议,主要用来实现字符界面的远程登录、远程控制等功能,SSH协议对通信双方的数据传输进行了加密处理,其中包含括用户登录时输入的用户口令,SSH为建立在应用层和传输层基础上的安全协议
SSH客户端<-----------网络----------------------->SSH服务端
优点:
数据传输是加密的,可以防止信息泄露
数据传输是压缩的,可以提高传输速度
常见的ssh协议
客户端
Linux Client:ssh、scp、sftp、slogin
Windows Client:Xshell、Mobaxterm、Putty、Securecrt、SshSecureShellClient
OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX Linux操作系统
Centos 7 系统默认已安装Openssh相关软件包,并将sshd服务添加为开机自启动,执行“systemctl start sshd”命令即可启动sshd服务,sshd服务默认使用的是TCP 22号端口,安全协议版本sshv2(之前有sshv1 有漏洞)
sshd服务默认配置文件是/etc/sshd_config
ssh_config和sshd_config都是ssh服务的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
OpenSSH
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config
ssh原理
公钥传输原理
●客户端发起连接请求
●服务端返回自己的公钥,以及一个会话id(这一步客户端得到服务端公钥)
●客户端生成密钥对
●客户端用自己的公钥异或会话id,计算出一个值Res,并用服务端的公钥加密
●客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
●服务端用解密后的值Res异或会话id,计算出客户端的公钥(这一步服务端得到客户端公钥)
●最终,双方各持有三个密钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
ssh加密通讯原理
对称加密
概念 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
常用算法 在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
特点
1)加密方和解密方使用同一个密钥;
2)加密解密的速度比较快,适合数据比较长时的使用;
3)密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
优缺点 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。 对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担
非对称加密
概念
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
常用算法 RSA(RSA algorithm):目前使用最广泛的算法 DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快 ECC(Elliptic curve cryptography,椭圆曲线加密算法) ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA 的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障
原理 首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下
优缺点 相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
登录
登录 方法一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
不是默认端口
[root@localhost ~]#vim /etc/ssh/sshd_config
[root@localhost ~]#
[root@localhost ~]#systemctl restart sshd
-p指定端口还是可以登录
还可以用-l登录
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
要想知道连接的是不是想要连的服务器,最简单的方法就是,连自己嘛,和密钥比较一下。
服务端配置
服务端常用配置
[root@localhost ~]#vim /etc/ssh/sshd_config
#Port 22 #端口号,建议修改
#LoginGraceTime 2m 超时时间2分钟
#PermitRootLogin yes # 默认ubuntu不允许root远程ssh登录
#StrictModes yes #检查.ssh/文件的所有者,权限等
#MaxAuthTries 6
//最大认证个数,但需要和ssh -o NumberOfPasswordPrompts=8(大于6数字)root@192.168.91.111(IP地址)需要配合这个选项一起使用
#MaxSessions 10 #同一个连接最大会话
#PubkeyAuthentication yes #基于key验证
#PermitEmptyPasswords no #空密码连接
PasswordAuthentication yes #基于用户名和密码连接
#GatewayPorts no 在最后一行添加
ClientAliveInterval 10 #单位:秒
#ClientAliveCountMax 3 #默认3
UseDNS yes #提高速度可改为no
#GSSAPIAuthentication yes #提高速度可改为no
#MaxStartups 10:30:100 #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
使用密钥对其免交互验证登录
-
客户端发起ssh请求,服务器会把自己的公钥发送给用户
-
用户会根据服务器发来的公钥对密码进行加密
-
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登录方式
-
首先在客户端生成一对密钥(ssh-keygen)
-
并将客户端的公钥ssh-copy-id 拷贝到服务端
-
当客户端再次发送一个连接请求,包括ip、用户名
-
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:dxb
-
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
[root@localhost .ssh]#ssh-keygen --help
[root@localhost .ssh]#ssh-keygen -t ecdsa
此时就会有一种加密方式
[root@localhost .ssh]#ls
id_ecdsa id_ecdsa.pub known_hosts
如果不在ssh目录下,需要写绝对路径/root/.ssh/id_ecdsa/pub
ssh-copy-id -i id_ecdsa.pub root@192.168.91.111
免密登录,就一路回车,不设置密码即可
使用密钥对其免交互验证登录
与用户密码无关
P地址无关
只与密钥对有关
ssh客户端
sftp命令 —— 安全FTP上下载
TCP Wrappers
在Linux系统中,许多网络服务针对客户机提供了某种访问控制机制, 如Samba、BIND、 HTTPD、OpenSSH 等。本节将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作 为应用服务与网络之间的一道特殊防线,提供额外的安全保障。
TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了
一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序,TCP Wrappers 还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。
TCP Wrappers的工作原理
相对于iptables防火墙访问控制规则,TCP Wrappers的配置更加简单。但是Tcp Wrappers也有两个缺点,第一,TCP Wrappers只能控制TCP协议的应用服务;第二,并不是所有基于TCP协议的应用服务都能接受TCP Wrappers的控制。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。
通常,链接库方式的应用要更加广泛也更有效率。例如vsftp、sshd及超级服务器xinetd等,都调用了libwrap共享库。
使用ldd命令可以查看程序的共享库
[root@localhost ~]#ldd /usr/sbin/sshd |grep "libwrap"
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f84f2d25000)
TCP Wrappers的访问策略
TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户机地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。
策略的配置方式
两个策略文件的作用相反,但配置记录的格式相同,如下所示。
服务程序列表:客户端地址列表
服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分隔
(1)服务程序列表
服务程序列表可分为以下几类。
ALL:代表所有的服务
单个服务程序:如“vsftpd“
多个服务程序组成的列表:如“vsftpd,sshd”
2)客户端地址列表
客户端地址列表可分为以下几类。
● ALL:代表任何客户端地址。
● LOCAL:代表本机地址。
● 单个 IP 地址:如“192.168.4.4”
● 网络段地址:如“192.168.4.0/255.255.255.0”
● 以“.”开始的域名:如“.bdqn.com”匹配 bdqn.com 域中的所有主机。
● 以“.”结束的网络地址:如“192.168.4.”匹配整个 192.168.4.0/24 网段
● 嵌入通配符“”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2”
● 匹配以 10.0.8.2 开头的所有 IP 地址。不可与以“.”开始或结束的模式混用
● 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”
访问控制的基本原则
关于TCP Wrappers机制的访问策略,应用时遵循的顺序和原则,首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问,否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;如果两个文件都找不到相匹配的策略,则允许访问。
[root@localhost ~]#vim /etc/hosts.deny
此时是不能登录的
假如,在hosts.allow设置让91.100登录,同时也在hosts.deny设置不让91.100登录,结果会怎样
结果是可以登的
轻量级自动化运维工具pssh
pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh
pssh命令选项
-H | 主机字符串,内容格式”[user@]host[:port]” |
-h file | 主机列表文件,内容格式”[user@]host[:port]” |
-A | 手动输入密码模式 |
-i | 每个服务器内部处理信息输出 |
-l | 登录使用的用户名 |
-p | 并发的线程数【可选】 |
-o | 输出的文件目录【可选】 |
-e | 错误输出文件【可选】 |
-t | TIMEOUT 超时时间设置,0无限制【可选】 |
-O | SSH的选项 |
-P | 打印出服务器返回信息 |
-v | 详细模式 |
--version | 查看版本 |
安装需要配置开发源
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#vim CentOS-Base.repo
在最后一行添加国内源
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
https://mirrors.huaweicloud.com/epel/$releasever/x86_64
https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0
[root@localhost yum.repos.d]#yum clean all
安装pssh
[root@localhost yum.repos.d]#yum install pssh -y
生成免密登录的密钥
[root@localhost yum.repos.d]#ssh-keygen
上传密钥对
[root@localhost .ssh]#ssh-copy-id 192.168.91.100
[root@localhost .ssh]#ssh-copy-id 192.168.91.102
执行一条命令多台客户机都被执行,比如,查看两台客户机的passwd文件,加-i是打印出来信息
[root@localhost .ssh]#pssh -H "192.168.91.100 192.168.91.102" -i cat /etc/passwd
当然也就创建文件,同时操作多台客户机,适用于二三十台机器的服务。挺好用的!!!