文章目录
1.SSH概述
1.1什么是SSH
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能
1.2ssh的特点
安全性: 数据传输是加密的,可以防止信息泄漏。
身份验证:防止未经授权的用户访问远程系统。
远程管理:可通过SSH协议登录远程服务器并执行命令,无需直接物理访问设备。
端口转发:SSH支持 端口转发功能,可以安全地传输其他协议和应用程序。
传输速度: 数据传输是压缩的,可以提高传输速度。
SSH具有强大的安全性、身份验证和远程管理功能,使得它成为远程访问和管理计算机系统的首选协议
1.3 OpenSSH
1.3.1 概念
OpenSSH是通过SSH协议实现的一套用于远程登录和文件传输的工具,包括SSH客户端(SSH)和SSH服务器(sshd)。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
1.3.2所含软件包
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh.config
1.4ssh远程连接原理
- 客户端发起链接请求
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
- 客户端发送加密值到服务端,服务端用私钥解密,得到Res
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密
3.ssh登录方式
3.1第一种方式
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p
### -p 指定端口号
ssh 192.168.67.101
3.2第二种方式
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址]
###-l 指定登录名
ssh -l root 192.168.67.101
3.3第三种方式:远程控制
ssh [远程登录主机名] [命令]
ssh 192.168.67.101 ls
4.服务端配置
[root@ky15-1 ~]# 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
5.免密登录
5.1远程登录的方式
5.1.1基于密码登录
原理:
- 客户端发起ssh请求,服务器会把自己的公钥发送给用户
- 用户会根据服务器发来的公钥对密码进行加密
- 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
5.1.2 基于密钥登录
- 首先在客户端生成一对密钥(ssh-keygen)
- 并将客户端的公钥ssh-copy-id 拷贝到服务端
- 当客户端再次发送一个连接请求,包括ip、用户名
- 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc
- 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
- 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
- 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
示例:
1.生成密钥
ssh-keygen
2.将公钥文件导入对方用户
3.查看是否能够免密登录
成功
版权归原作者 想当大佬的一天 所有, 如有侵权,请联系我们删除。