什么是SSH服务器?
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络---------------->SSH服务端
SSH优点
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
常见的SSH协议
SSH原理
公钥传输原理
-
客户端发起链接请求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
-
客户端发送加密值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
ssh加密通讯原理
(1)对称加密
1、概念
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
2、常用算法
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
3、特点
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
4、优缺点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担
(2)非对称加密
1、概念
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
2、常用算法
- 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 可以使用更小的秘钥,更高的效率,提供更高的安全保障
3、原理
首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下
5、优缺点
相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
此本次实验中,我们用非对称加密算法ECDSA进行加密,为了方便用root用户,也可给其他普通用户配置
登录
登录 方式一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
1)当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
示例:
登录方法二:
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
示例:
登录方法三:
有些企业在管理外网服务器时,出于安全等因素的考虑做安全策略(例如防火墙),一般不会把所有服务器都设置成可ssh直连,而是会从中挑选出一台机器作为跳板机,当我们想要连接外网服务器时,我们要先通过ssh登录到跳板机,再从跳板机登录到目标服务器。
[root@localhost .ssh]#iptables -A INPUT -s 192.168.91.102 -j REJECT
#模拟防火墙
[root@localhost ~]# ssh -t 192.168.91.101 ssh -t 192.168.91.102 ssh 192.168.91.103
#方便跳板连接
服务端配置
常用配置项
[root@localhost ~]# vim /etc/ssh/sshd_config
17 Port 22
#生产建议修改
ListenAddress ip
#监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
LoginGraceTime 2m
#用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
PermitRootLogin yes
#默认 ubuntu不允许root远程ssh登录
StrictModes yes
#检查.ssh/文件的所有者,权限等
MaxAuthTries
#用来设置最大失败尝试登陆次数为6
MaxSessions 10
#同一个连接最大会话
PubkeyAuthentication yes
#基于key验证
PermitEmptyPasswords no
#密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
PasswordAuthentication yes
#基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10
#单位:秒
ClientAliveCountMax 3
#默认3
UseDNS yes
#提高速度可改为no 内网改为no 禁用反向解析
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
使用秘钥对及免交互验证登录
原理:
- 用户/密码
- 基于秘钥
用户/密码:
1.生成公钥和私钥
2.将公钥导给对面
-
客户端发起ssh请求,服务器会把自己的公钥发送给用户
-
用户会根据服务器发来的公钥对密码进行加密
-
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登录方式
-
首先在客户端生成一对密钥(ssh-keygen)
-
并将客户端的公钥ssh-copy-id 拷贝到服务端
-
当客户端再次发送一个连接请求,包括ip、用户名
-
服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串
-
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
-
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
-
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
ssh客户端
scp命令 —— 远程安全复制
sftp命令 —— 安全FTP上下载
格式:sftp user@ip
安全性传输sftp
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。
sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作
所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP
[root@localhost ~]# sftp root@20.0.0.250 #登陆到服务器
get下载
get anaconda-ks.cfg /home/
上传
put abc.txt #默认时会上传的/root
put abc.txt /home/
查看可用命令
help #查看sftp可使用的命令和用途
打印服务器当前位置
pwd #打印当前服务器所在位置
lpwd #打印当前本地位置
切换目录、查看文件
cd #切换服务器上的目录
ls #查看当前目录下文件列表
下载文件、退出sftp
get #下载文件
get -r #下载目录
quit #退出sftp
put #上传文件
put -r #上传文件夹
退出命令:quit、exit、bye都可以
sftp用户权限设置
对于服务器文件上传, 我们会创建sftp用户登陆服务器,禁止ssh登陆服务器;这样是为了安全性的考虑,避免外部访问服务器的其他路径,对其他路径上的文件进行访问、修改等。
现在对外提供test用户,sftp访问服务器;创建过程如下:
1. 建立sftp用户 test
useradd test, 此时会在创建sftp用户目录/home/test
chown -R root:test /home/test
chmod -R 750 /home/test
2.创建上传目录file,赋予权限
cd /home/test
mkdir file
chown -R test:test /home/test/file
chmod -R 755 /home/test/file
说明:
sftp家目录属主必须是root,属组是test,该权限最高设置为755,否则sftp连不上;sftp登陆直接会进入file目录;对于文件上传或下载 不要使用绝对路径/home/test/file.
3. 修改sshd_config文件
vim /etc/ssh/sshd_config
注释调 Subsystem sftp /usr/libexec/openssh/sftp-server
结尾添加
Subsystem sftp internal-sftp
Match User test01
ChrootDirectory /home/test (sftp用户的根目录)
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
重启服务:
systemctl restart sshd.service
rsync工具可以基于ssh和rsync协议实现高效率的远程系统之间复制文件,使用安全的shell连接做为传
输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于rsync包
注意:通信两端主机都需要安装 rsy
rsync -av /etc server1:/tmp #复制目录和目录下文件
rsync -av /etc/ server1:/tmp #只复制目录下文件
常用选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留修改时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-u 如果接收者的文件比发送者的文件较新,将忽略同步
-z 压缩,节约网络带宽
-a 存档,相当于-rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
--delete 源数据删除,目标数据也自动同步删除
rsync -auv --delete /data/test 10.0.0.7:/data