SSH远程登录协议
一.SSH服务
1.SSH基础
SSH服务器
SSH是一种安全通道协议,主要用于字符界面的远程登录,控制等,SSH协议会对双方通信数据进行加密,包括用户登录输入的口令,SSH是建立在应用层和传输层基础上的安全协议,对数据有着加密,压缩的优点,安全快速。
常见SSH协议
ssh软件包 openssh
ssh协议
centos7自带的软件,开机自启, sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)ftp 20 21,帮助我们实现远程连接
配置文件
/etc/ssh/
服务端配置文件
sshd_config
客户端配置文件
ssh_config
客户端:
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient
SSH服务器主要包括SSH远程连接和ftp文件传输服务
相较于telnet,SSH更加安全,telnet的数据是明文传输的
ecdsa 代表加密算法 pub代表公钥
2.公钥传输原理
1.客户端发送连接请求
2.服务端返回自己的公钥x,以及一个会话id
3.客户端生成一个密钥对
4.客户端会用自己的公钥和会话id计算出一个res值,并用服务端的公钥加密
5.客户端发送加密值给服务端,服务端用私钥解密,得到res
6.服务端将解密后的res通过会话id计算出客户端的公钥
7.最终,双方都拥有三个密钥(自己的公私密钥和对方的公钥),之后通信的数据都会加密
加密通信原理
对称加密
概念
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用
常用算法
在对称加密算法中常用的算法有: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 可以使用更小的秘钥,更高的效率,提供更高的安全保障
优缺点
相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。
此本次实验中,我们用非对称加密算法ECDSA进行加密,为了方便用root用户,也可给其他普通用户配置
3.登录
选项 | 说明 |
---|---|
-l | 指定登录名称 |
-p | 指定登录端口( |
-t | 可以强制SSH连接为交互式会话,并在远程终端上执行命令 |
[root@localhost ssh]#ssh -l root 192.168.82.101
Last login: Fri Aug 4 15:54:25 2023 from 192.168.82.1
[root@localhost ssh]#ssh -l root 192.168.82.101 hostname
root@192.168.82.101's password:
localhost.localdomain
//可以直接在后面跟上命令,这样被远程登录的终端会执行并反馈
4.服务端配置
[root@yyds ~]#vim /etc/ssh/sshd_config //服务端配置
#Port 22 //注释默认配置端口为22
#ListenAddress 0.0.0.0
//表示监听所有地址的安全建议,如果不需要公网ssh访问,可以更改为内网网段
#LoginGraceTime 2m
//如果用户登录失败,在切断前服务器等待时间,默认单位秒
#PermitRootLogin yes
//默认,ubuntu不允许root远程登录,虽然禁止root登录,但是仍然可以su root切换
#StrictModes yes
//检查.ssh/文件的属主,权限等
#MaxAuthTries 6
//最大登录失败次数
#MaxSessions 10
//同一个连接最大会话
#PubkeyAuthentication yes
//基于key验证
#PermitEmptyPasswords no
//密码验证,根据不同的安全级别需求,可以设置为no,使用认证的密钥登录
#PasswordAuthentication yes
//基于用户密码登录
#GatewayPorts no
#ClientAliveInterval 0
//秒
#ClientAliveCountMax 3
//默认3
#UseDNS no
//内网环境不使用DNS
GSSAPIAuthentication yes
//提高速度可改为no
#MaxStartups 10:30:100
//未认证连接最大值
//以下可以限制可登录用户的办法:白名单 黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2
注意,白名单和黑名单不要同时使用
5.实际案例
修改端口
[root@localhost ~]#vim /etc/ssh/sshd_config
//在17行修改自己默认的端口
Port 9966
禁止root登录
[root@localhost ~]#vim /etc/ssh/sshd_config
//在38行no改为yes
PermitRootLogin no
//登录用户依然可以su切换到root,所以需要修改pam模块
[root@localhost ~]#vim /etc/pam.d/su
//开启第6行
auth required pam_wheel.so use_uid
白名单黑名单
[root@localhost ~]#vim /etc/ssh/sshd_config
//在最后一行添加相应规则
AllowUsers zhangsan@192.168.82.101
DenyUsers lisi
//只允许192.168.82.101的zhangsan登录,拒绝所有lisi用户登录
密码错误限制
[root@localhost ~]#vim /etc/ssh/sshd_config
//第40行修改密码错误后限制登录次数
40 #MaxAuthTries 6
修改后取消注释
ssh服务的最佳实践
- 建议使用非默认端口 22
- 禁止使用protocol version 1
- 限制可登录用户 白名单
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略
- 仅监听特定的IP地址 公网 内网
- 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志 分离
6.使用密钥实现免密登录
客户端生成公钥和私钥,将其发送给服务端,实现免密登录
具体流程:
1.客户端生成一对密钥
2.将密钥拷贝给服务端
3.客户端再次发送请求,ip用户名
4.服务端得到请求会在authorized_keys()中查找,如果有对应的ip用户名,会随机生成字符串
5.服务端使用拷贝过来的客户端公钥加密,发送给客户端
6.客户端得到后用私钥解密,将解密后的字符串发送给服务端
7.服务端收到后确认,如果一致,进行连接
//客户端
[root@localhost slaves]#ssh-keygen
//生成密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8kQVLIMFhk4ijPN5VCz4fdVVgP5rEMrIw+tua5nQ6zo root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|o . +++..oo ooo.|
|+.o =.o o.o o |
| + B o .+ . |
| o + ... o |
| . .=So . o |
| .+* o . . |
| ..* . . |
| E B o |
| .O=. . |
+----[SHA256]-----+
[root@localhost slaves]#ssh-copy-id -i 192.168.82.100
//将密钥拷贝给服务端
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.82.100 (192.168.82.100)' can't be established.
ECDSA key fingerprint is SHA256:Y9D1HHeRVrLCyUNjSBLfBTwKMhzmLjcjSdvX3inDFzc.
ECDSA key fingerprint is MD5:f7:aa:91:02:77:58:28:62:02:7d:c6:85:c7:47:a3:97.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.82.100's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.82.100'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost slaves]#ssh 192.168.82.100
//进行免密登录
Last login: Sun Aug 6 14:29:54 2023 from 192.168.82.1
7.ssh客户端
scp远程安全复制
sftp安全ftp下载
[root@localhost network-scripts]#sftp 192.168.82.100
Connected to 192.168.82.100.
sftp> get /data/aaaaa //下载到当前文件夹
Fetching /data/aaaaa to aaaaa
sftp> ls //查看当前目录下文件列表
anaconda-ks.cfg bin core.2414 initial-setup-ks.cfg 下载
公共 图片 文档 桌面 模板
视频 音乐
更多用法:
上传
put #默认时会上传到/root
put /home/ 上传到home下
查看可用命令
help //查看sftp可使用的命令和用途
打印服务器当前位置
pwd //打印当前服务器所在位置
lpwd //打印当前本地位置
切换目录
cd //切换服务器上的目录
下载文件、退出sftp
get //下载文件
get -r //下载目录
quit //退出sftp
put //上传文件
put -r //上传文件夹
退出命令:quit、exit、bye都可以