SSH服务

server与service的区别

服务: service 服务器: server
在一台服务器里运行某个服务
在一台linux服务器里运行ssh服务,web服务,MySQL服务等

什么是ssh服务

请添加图片描述

SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录提供服务。
端口:22 传输层:tcp
telnet 早期的远程控制的协议(服务) -->端口:21
如何判断服务是否起来:

1、ss -anplut|grep ssh
2、netstat -anplut|grep ssh
3、lsof -i:22
4、ps aux|grep sshd

使用什么软件实现了ssh

OpenSSH: 是一个基于ssh协议的安全软件
OpenSSH是使用SSH协议远程登录的首选连接工具。它对所有流量进行加密,以消除窃听、连接劫持和其他攻击。此外,OpenSSH还提供了大量的安全隧道功能、多种身份验证方法和复杂的配置选项

[root@firewall ~]# rpm -qa|grep openssh
openssh-server-7.4p1-21.el7.x86_64   -->提供服务的软件包  -->sshd
openssh-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64  --》提供客户端使用的命令的软件包,ssh, scp, and sftp.

补充: rpm 是linux里软件管理的命令
-qa 查询所有的已经安装了的软件 query all
yum 也是linux里的软件管理的命令,底层是基于rpm的 -------> yum 是使用python开发的软件管理工具

在centos系统里,默认安装openssh软件,并且sshd服务是开机启动

Ubuntu系统 server 20 ,在安装的时候,可以选择是否安装openssh软件

有什么用?解决了什么问题?

解决的问题: 对服务器的远程控制,远程操作

SSH原理

加密的过程=身份识别(数字签名为什么需要签名?==》 不可抵赖;什么时候发生 ==》第一次接触的时候) +
数据加密(需要使用公钥和私钥:确认身份后,建立连接后数据加密)

验证方式

密码认证:
存放用户名密码的两个文件 	/etc/passwd  	/etc/shadow  ssh服务依赖的是linux系统里的用户名和密码
密钥认证:
密钥的作用:其实就是给加密算法提供的参数,其实本质上就是不同长度和内容的字符串

身份识别

第一次建立连接时,会进行身份识别,采用数字验证的方式进行识别
know_hosts 客户机使用ssh第一次连接服务器时,将服务器上sshd守护进程的公钥复制到本地,存放到本地~/.ssh/known_hosts文件中,文件里每行存放一台服务器的公钥用来验证服务器的身份,第一次连接过去服务器发送过来的,存放的是别的服务器的公钥,第一次连接的时候会让 你输入yes or no是否写入

数字验证

数字验证其实就是一串随机产生的字符串,密钥是一种非对称加密的方式。公钥和私钥

public key
	    公开的
			给别人的
private key
		不公开
			自己持有

请添加图片描述

数据加密

建立连接后,传输数据的时候,对数据进行加密的,采用各种算法对数据进行加密,如centos存放密码的文件shadow采用sha512,使用authconfig --test | grep hashing查看加密方式

什么时候需要使用公钥和私钥?
数据加密和身份识别

ssh搭建+配置+排错+命令

命令

ssh:远程登录的命令
ssh的命令的使用

方式1 ssh 用户名@服务器地址   --》推荐
方式2 ssh -l 用户名  服务器地址
方式3 ssh  服务器地址

	[root@manager161 .ssh]# ssh root@192.168.0.180  --》推荐	
	[one@manager161 ~]$ ssh 192.168.0.180  不指定登陆用户,默认会使用当前的用户名远程连接
	[one@manager161 ~]$ ssh -l root 192.168.0.180
	root@192.168.0.180's password: 
	Last login: Sat Jun 26 11:27:12 2021 from 192.168.0.163
[root@www ~]# exit  退出登出
	-p
		指定端口号
		port

sftp:基于ssh协议的ftp功能,底层使用的ssh协议,提供文件的上传和下载
scp:远程传输文件的命令

配置

目录/etc/ssh文件
config 配置==》配置文件:给进程传递参数的

[root@nameserver ssh]# cd /etc/ssh/
sshd_config  --》服务器端的配置文件  server   --》进程:sshd 
ssh_config --》ssh命令使用的配置文件 client  --》进程:ssh
ssh_host_ecdsa_key.pub  --》ecdsa加密算法的公钥
ssh_host_ecdsa_key    --》ecdsa加密算法的私钥
	

对进程的操作

systemctl start sshd
systemctl stop sshd
systemctl restart sshd==》可以理解为先stop,在start开一个新进程
systemctl reload sshd ==>作用与restart一样,不中断sshd服务,从新加载配置文件

排错

对于排错,我们可以通过查看日志文件
/var/log/secure
Accepted password
登录成功
Failed password
登入失败的

问题:
1、(sshd)ssh服务关闭以后,已经连接的ssh服务会断开码?还可以连接ssh服务吗?
已经连接的不会断开,新的连接不能连接,父进程被杀死,systemd接管,端口没人监听,不能连接新的

2、如何查看哪些哪些连接我们的虚拟机,曾经登入过的呢
w查看正连接的虚拟机,曾经的可使用log日志/var/log/secure
Accepted password======》登入成功
Failed password====》失败

安全加固

首先我们要知道ssh连接时需要哪些参数

ssh 用户名@ip地址 端口号

登入时验证有:密码和密钥验证
因此分析问题,ip我们不能修改,因此对别的内容进行需改设置

1.禁用root用户远程登录 --》黑客就需要去猜我们的用户名了
2.把密码设置复杂
3.修改端口号  --》需要去寻找我的ssh的端口号
4.禁用密码认证,启用密钥认证

那么如何修改这些配置信息呢?
进入到配置文件:

cd/etc/ssh/

修改服务端进程配置文件:

vim sshd_config

Port 2299
ListenAddress 0.0.0.0 --》代表任意的接口的ip地址上都提供ssh服务

ListenAddress 192.168.0.2 --》只是在192.168.0.2上提供ssh服务

PermitRootLogin no 禁用root用户远程登录

PubkeyAuthentication yes 启用密钥认证

AuthorizedKeysFile .ssh/authorized_keys --》密钥文件存放的路径–》存放别人的公钥的文件–》在用户的家目录.sshi

PasswordAuthentication yes 密码认证

修改完配置文件之后,因为禁止root用户 登入,是所以需要创建一个普通用户

[root@firewall ssh]# useradd  a  新建一个普通的用户
[root@firewall ssh]# echo 123123|passwd a --stdin  给用户设置密码

service sshd restart 重启sshd服务
**注意:**如果登入后,想使用root用户的权限,可以su root切换过去
我们root不能登入却可以切换呢?
这是因为我们在远程连接时,进程首先会去查看配置文件,文件禁止root用户登入,所以直接拒绝,别人用户登入时,进行身份验证,登入成功,在切换root用户,已经是内部命令了,进程不会再去查看远程连接的配置文件了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值