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用户,已经是内部命令了,进程不会再去查看远程连接的配置文件了