一、ssh介绍
1.1 SSH简介
SSH(Secure Shell)是一种安全通道协议,主要用于实现远程登录、远程复制等功能的字符接口。SSH 协议包括用户在登录时输入的用户密码、双方之间的通信。 加密数据传输,SSH 是一种建立在应用层和传输层上的安全协议。SSH 是一种建立在应用层和传输层上的安全协议。数据经过压缩,以提高传输速度。
SSH 启用的端口为:TCP22号端口
1.2 SSH的优势
SSH 是一种可靠的协议,旨在为远程登录会话和其他网络服务提供安全保障。正确使用 ssh 可以弥补网络漏洞。除 ssh 程序外,客户端还包括 scp(远程复制)、slogin(远程登录)和 sftp(安全文件传输)等应用程序。
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
1.3 常用的SSH软件的介绍
SSH客户端:putty(开源工具),xshell,CRT
SSH服务端:openSSH(centos7系统默认安装)
centos7 ssh服务启动自检命令: systemctl is-enabled sshd
1.4 sshd_ config常用选项设置
1 vim /etc/ssh/sshd_config #服务端配置文件
2 #Port 22 #监端口为22
3 #AddressFamily any #监听地址为任意网卡,也可以指定Openssh服务器的具体ip
4 #LoginGraceTime 2m #登录验证时间为2分钟
5 #PermitRootLogin yes #禁止root用户登录
6 #MaxAuthTries 6 #最大重试次数为 6
7 #PermitEmptyPasswords no #禁止空密码用户登录
8 #UseDNS no #禁用DNS反向解析,以提高服务器的响应速度
9 ----------------------------------------------------------------------------------
10 配置允许和禁止用户登录:加@表示限制ip,注意允许和禁止不要同时使用!!
11 AllowUsers zhangsan #允许zhangsan登录(多个用户以空格间隔)
12 AllowUsers zhangsan@192.168.80.80 #只允许zhangsan通过192.168.80.80登录
13 DenyUsers lisi #禁止lisi登录
1.5 SSH端口、配置文件
sshd服务默认使用TCP的22端口。
sshd服务的默认配置文件是==/etc/ssh/sshd_config==。
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件/etc/ssh/ssh_config,后者则是针对服端的配置文件/etc/ssh/sshd_config
[root@CXK ~]# netstat -lntp #查看服务使用的端口号
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1074/sshd
3052/sshd: root@pts
[root@clr ~]# ss -lntp
(("dnsmasq",pid=1457,fd=6))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1074,fd=3))
LISTEN 0 128 127.0.0.1:631 *:* users:
1.6 SSH的密钥登录
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。而ssh密钥就是一种非对称性的密钥。
ssh 远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。
密钥登录的过程:
1. ssh客户端通过ssh-keygen
生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录
二、SSH的应用
2.1 SSH配置文件信息
在Linux中实现ssh,是通过openSSH的sshd服务提供的。
2.1.1存放ssh服务端的配置文件
/etc/ssh/sshd_config
vim /etc/ssh/sshd_config
常用选项配置
#Port 22
#ListenAddress 0.0.0.0
常用配置项:
#LoginGraceTime 2m 登录验证时间为两分钟
#PermitRootLogin yes 允许root用户登录(安全考虑,这里可以设置为no,禁止root用户登录)
#MaxAuthTries 6 最大重试的次数为6
PasswordAuthentication yes 允许空密码用户登录
UseDNS no 禁止DNS反向解析,提高服务器的响应速度
2.1.2 存放ssh客户端的配置文件
/etc/ssh/ssh_config (该配置基本默认保持不变,就可以了)
2.2 ssh在Linux中的密码登录
ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p port]
[root@CXK ~]# ssh 192.168.136.110
exit 退出当前用户
[root@CXK~]# ssh -p 22 Chen@192.168.136.100
2.3 利用ssh协议传输文件和获取文件
ssh scp sftp 都是默认使用ssh协议,端口为 tcp 22
2.4 修改默认端口
#修改默认端口
[root CXK1 ~] vim /etc/ssh/sshd_config
#17 行修改自己默认的端口
17 Port 2272
2.4 禁止root用户登录
[root CXK1 ~] vim /etc/ssh/sshd_config
#开启38 行 并改为 no,默认注释并写的yes
38 PermitRootLogin no
#注意虽然阻止了root 但是普通用户可以使用su
2.5 白名单黑名单列表
[root IKUN2 ~] vim /etc/ssh/sshd_config
AllowUsers Chen@192.168.136.110 lisi #允许所有有的主机访问我的lisi用户
#只允许Chen从192.168.136.110上访问
vim /etc/ssh/sshd_config
DenyUsers ww
三、SSH通过密钥免密登录
第一步:首先在客户端生成密钥
第二步:把密钥文件复制给另一个客户端
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa id_rsa.pub
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub 192.168.136.110
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
The authenticity of host '192.168.136.110 (192.168.136.110)' can't be established.
ECDSA key fingerprint is SHA256:3HPTJDS6kShhYh+uHMJZlxYBdgwW1iDZfo1ogM6zo64.
ECDSA key fingerprint is MD5:6a:89:27:b4:4f:23:9c:76:07:a0:91:d3:7b:42:dd:5a.
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.136.110's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.136.110'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost .ssh]# ssh 192.168.136.110
Last login: Wed Nov 15 00:46:47 2023 from 192.168.136.66
[root CXK ~]
第三步:在令一台(或者多台) 客户端同样操作
66那台主机不知怎么回事设置不了这里用的是110和120两台,操作是一样的
第四步:验证结果
110主机
120主机
总结:
1. 熟悉 ssh 密钥生成过程,对 ssh 访问进行加密,以符合更安全的远程控制标准;
2. 部署新服务器后,取消 root 用户的远程访问权限,以提高安全性。
3. 使用 ssh 中更有效的传输获取功能。