1.sshd简介
sshd=secure shell
可以通过网络在主机中开启shell的服务
什么是sshd服务?
客户端主机通过网络在服务端主机中开启服务端主机shell的服务
客户端通过网络连接服务端,并且控制服务端,也就是客户端开启了服务端的shell
客户端软件 sshd
(1)连接方式:
ssh username@ip ##文件模式的连接
ssh -X username@ip ##可以在连接成功之后开机图形
注意:!!!!
第一次链接陌生主机是要建立认证文件,所以会询问是否建立,需要输入yes,再次链接 此台主机时, 因为已经生成~/.ssh/know_hosts文件所以不需要再次输入yes
如果不是纯净的环境,要删除/root/.ssh/?
客户端主机第一次连接服务端主机会在这个目录下生成known_hosts这个文件,为了验证这个实验效果,所以先将这个目录清空或者直接删除这个隐藏目录
直接在家目录下面输入ls -a(查看所有文件,包括非隐藏文件和隐藏文件) 或者l.(只查看隐藏文件) 如果没有.ssh文件,说明没有连接过远程主机(服务端主机)
(2)远程复制:
scp file root@ip:dir ##上传
scp root@ip:file dir ##下载
步骤:
- sshd=secure shell: 远程通过网络打开指定用户shell
- 在打开一个虚拟机 更换网络+200
- ifconfig eth0查看 删除/.ssh/文件
- 重命名hostname exit 还可以换背景颜色和字体大小
- 两个虚拟机都要连上网络,删.ssh文件,重命名
做sshd服务之前要先设置网络:
实验环境说明:本实验是在两台虚拟机中做,server主机为服务端(172.25.254.222),desktop主机为客户端(172.25.254.162)
为了区分两台虚拟机,可以更改服务端的颜色。edit–>profile perferences
用客户端主机连接服务端主机
注意有颜色的变成了客户端,第二次做作业网络号和颜色和第一次不一样,注意不要被混淆,但是还是client去连接server(client:172.25.254.111 server:172.25.254.211 )
出现known_hosts文件
cat known_hosts 查看该文件的内容 会显示server主机的信息
注意客户端连接服务端之后又logout了
#################################################
成功后并且开启对方的图形编辑模式的连接方式(gedit 、firefox等)
ssh -X username@ip ##可以在连接成功之后开机图形
当然此时在客户端输入firefox就可以控制服务端的图形编辑模式了,也就是可以打开firefox了。
远程复制:
此实验不需要客户端主机控制服务端主机(将之前的连接退出exit),只需要知道对方的ip及存在的帐号和密码就可以进行上传和下载。
scp file root@ip:dir ##上传
scp root@ip:file dir ##下载
下载:
重点注意:为了防止错误,所有的路径都采用绝对路径,并且上传或者下载目录的时候加上 -r
命令格式:scp file root@ip:dir 上传
将客户端主机上的file文件复制到远程主机的dir (相当于上传文件)
2.sshd 的key认证(免密操作)
(1)为什么要进行免密操作?
如果客户端知道服务端主机的ip地址和密码,就可以远程操控服务端
如果任意一个客户端知道服务端主机的ip地址和密码,并且知道它里面的重要文件存放路径
那么就可以拷贝服务端的文件
这样的操作在实际企业当中非常不安全
(2)怎样进行免密操作?
采用钥匙和锁的方式,服务端想让客户端什么时候连就什么时候连
步骤一:在服务端输入:ssh-keygen ,生成钥匙和密码 , id_rsa是钥匙 id_rsa.pub是锁
在服务端输入 ssh-keygen 三次回车 ,每次回车都有原因 第一次回车是钥匙和密码存放路径(可以直接回车,存放在默认路径下)
第二次回车是密码(可以直接回车,不设置密码)
第三次回车也是密码(可以直接回车,不设置密码)
1:服务端生成key认证
[root@server ~]# ssh-keygen ##生成密钥
sshy-keygen -f /root/.ssh/id_rsa -p ' ' ##私钥
sshy-keygen -f /root/.ssh/id_rsa .pub -p ' ' ##公钥
1)上锁
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200 ##加密本机的sshd 服务
## authorized_keys id_rsa id_rsa.pub knowm_hosts
^^^^^^
表示加密成功
2)分发钥匙
scp /root/.ssh/id_rsa root@172.25.254.100:/root/.ssh/ ##将钥匙给100主机
3)测试
在客户主机中 (172.25.254.100)
ssh root@172.25.254.200 ##连接时发现直接登录时不需要root登录的密码认证
1)上锁 先给自己上锁,也就是给服务器上锁
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200 ##加密本机的sshd 服务
## authorized_keys id_rsa id_rsa.pub knowm_hosts
^^^^^^
表示加密成功
2)分发钥匙
在服务端输入:scp /root/.ssh/id_rsa root@172.25.254.111:/root/.ssh/ 将密码传给客户端
客户端/root/.ssh/的这个文件(目录)必须存在 ,相当于上传
注意:如果客户端没有/root/.ssh/这个文件,客户端使用密码方式重新连接一次服务端,然后exit。会生成该文件,然后可以将锁传给客户端了( 服务端重新给客户端钥匙,并且查看钥匙是否一致)
3)测试
在客户主机中 (172.25.254.100)
ssh root@172.25.254.200 ##连接时发现直接登录时不需要root登录的密码认证
在客户端cd -->cd.ssh/-->ls-->ssh root@172.25.254.211不需要密码验证!!!!
sshd的安全设定
(1)为什么要进行安全设定?
因为服务端的root权限太大,客户端如果使用服务端的root权限极不安全
为了保证ssh服务器的安全性:服务端开放的权限不能太多,一般不太让客户端主机用服务端主机的超级用户root
客户端(黄色)只做测试,所有的设置均在服务端设置
服务端每次改完一个参数重启才会起作用:在服务端systemctl restart sshd.service
PasswordAuthentication yes|no ##是否允许用户通过登陆系统的密码做sshd的认证
最后更改回来
PermitRootLogin yes|no
##是否允许root用户通过sshd服务的认证。客户端是否能通过服务端的root用户远程连接服务端
Allowusers student westos
##设定用户白名单,白名单出现默认不在名单中的用户不能使用sshd
设定用户的白名单,此名单里面的用户可以做sshd服务 (服务端不存在用户直接输入即可生成(这个观点错误), 多个用户用空格隔开)
如果写入服务端本身不存在的用户,那么当客户端连接服务端的时候需要密码就不知道是什么
因此必须先在服务端建立实验用户并且设置实验用户的密码,这样在客户端连接的时候才能看到实验效果
先在服务端里面建立两个用户student(密码设为student) 和westos(密码设为westos)
此处注释有问题阿,,和面密没什么关系阿
在把westos加入白名单
客户端可以以westos身份登陆到服务端上
Denyusers westos ##设定用户黑名单,黑名单出现默认不在名单中的用户能使用sshd
设定用户的黑名单,此名单里面的用户不可以做sshd服务 (多个用户用空格隔开,这个用户必须是服务端存在的,没有的话先建立再写入文件)
3. 添加sshd登陆信息
1)为什么要添加sshd登陆信息?
为了使客户端在连接服务端的时候可以直观的看到服务端的相关信息,因此要添加信息
也就是使客户端登陆服务端的时候显示服务端的一些信息
(2)怎样添加sshd登陆信息?
在服务端的 /etc/motd 文件里面设置服务端自己的一些信息
vim /etc/motd 文件内容就是登陆后显示的信息
服务端: vim /etc/motd ##文件内容就是登陆后显示信息(不需要重启服务,写了就会生效)
4.用户的登陆审计
(1)什么叫用户的登陆审计?
在服务端里面查看使用服务端的客户端的相关信息
(2)怎样进行登陆审计?
在服务端直接输入命令即可
(3)常用的登陆审计的命令:
- w 查看正在使用当前系统的用户
- last 查看使用过并且退出的用户信息
- lastb 试图登陆但没成功的用户
1: w ##查看正在使用当前系统的用户
w -f ##查看使用来源,显示主机名等信息
w -i ##显示IP
第一列是用户身份
/var/run/utmp 注:w后会有使用的文件,执行 > /var/run/utmp 以后,将文件清空,再次w -i,则输出正在运行的文件用户为0
该文件里面存放的是w查出来的信息,但是这个文件不能用cat查看,可以用放file查看
2:last ##查看使用过并退出的用户信息
/var/log/wtmp
该文件里面存放的是last查出来的信息,但是这个文件不能用cat查看,可以用放file查看
3:lastb ##试图登陆但没成功的用户
/var/log/btmp
该文件里面存放的是lastb查出来的信息,但是这个文件不能用cat查看,可以用放file查看
5.如何踢出别人正在我的主机上进行的进程?
说明:此实验在两台虚拟机上面完成
步骤一:用desktop主机远程连接server主机
步骤二:在server主机上用w -i查看他的ip(显示当前正在控制你的主机的ip)
步骤三:查看他的进程的id 使用 ps aux | grep pts/1(进程名字在tty下面)
步骤四:kill -9 他的进程的id,然后再查看是否结束了他的进程
客户端会直接断开ssh的连接
ssh和sshd的区别
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。
6.文件在系统中的传输
1.scp
scp file user@ip:/dir
scp user@ip:/file dir
2.rsync ##远程同步,速度快,默认会忽略,文件属性,设备文件,链接文件
-r ##同步目录
-p ##同步权限
-o ##同步文件所有人
-g ## 同步文件所有组
-l ##同步链接
-D ##同步文件设备
-t ##同步文件时间戳
注意:
当文件比较小时,scp和rsync传输文件的速度差不多
当文件比较大时,scp和rsync传输文件的速度相差很大
传输速度的快慢不是取决于文件的数量,而是取决于文件的大小
注意:
/mnt 与 /mnt/的区别在于
/mnt 传输mnt这个目录以及mnt下的文件
/mnt/ 传输mnt这个目录下的文件
同步权限
时间戳也一毛一样了
7.tar ##归档文件(把很多个文件变成一个文件)
-c ##创建
-v ##显示过程
-f #指定归档文件名称
-x ##解档
-t 查看归档文件内容
-r #添加文件到归档中
--get ##解档指定文件
--delete ##删除归档中的指定文件
-C ##指定解档目录
8.压缩:
包括:先打包再压缩;打包的同时压缩,解压
zip
zip -r xxx.tar.zip xxx.tar 将后面已经打包的文件压缩成前面的文件格式
unzip xxx.tar.zip
gz
gzip xxx.tar gzip xxx.tar 直接压缩后面的打包文件
gunzip xxx.tar.gz
====
tar zcf xxx.tar.gz /xxx 打包的同时压缩
tar zxf xxx.tar.gz
bz2
bzip2 xxx.tar 直接压缩打包的文件
bunzip xxx.tar.bz2
====
tar jcf xxx.tar.bz2 /xxx
tar jxf xxx.tar.bz2
xz
xz xxx.tar
unxz xxx.tar.xz
===
tar Jcf xxx.tar.xz /xxx
tar Jxf xxx.tar.xz
压缩格式不同,都可以压缩。
结论:通过对比4种压缩后的文件大小可知, zip 压缩 、gz压缩、bz2压缩、xz压缩的压缩效果越来越好
9.系统日志管理
#(1).rsyslog
此服务时用来采集系统日志的,它不产生日志,只是起到采集作用
rsyslog的管理
/var/log/messages #服务信息日志
/var/log/secure 系统登陆日志
/var/log/cron 定时任务日志
/var/log/maillog 邮件日志
/var/log/boot.log 系统启动日志
指定日志采集路径
什么类型的日志。什么级别的日志 /var/log/file ##日志采集规则
##日志类型分为:
auth ##pam产生的日志
authpriv ##ssh,ftp等登陆信息的验证信息
cron #时间任务相关
kern ##内核
lpr ##打印
mail ##邮件
mark(syslog)-rsyslog#服务内部的信息,时间标识
news ##新闻组
user ##用户程序产生的相关信息
uucp ##unix to unix copy unix主机之间相关的通讯
local 1~7 ##自定义的日志设备
##日志级别分为#
debug ##有调式信息的,日志信息最多
info ##一般信息的日志,最常用
notice ##最具有重要性的普通条件的信息
warning ##警告级别
err ##错误级别,阻止某个功能或者模块不能正常工作的信息
crit ##严重级别,阻止某个系统或者整个软件不能正常工作的信息
alert ##需要立刻修改的信息
emerg ##内核崩溃等严重信息
none ##什么都不记录
##注意:从上到下,级别从低到高,记录的信息越来越少
##详细的可以查看手册:man 3 syslog
操作示例:
目的:把系统中的所有日志都采集到/var/log/westos文件中
操作:
vim /etc/rsyslog.conf
*.* /var/log/westos
systemctl restart rstslog
测试:
systemctl restart sshd ##命令目的为了生成日志
cat /var/log/westos ##此文件中出现日志信息
(2)日志的远程同步
注意:要先cd
在日志发送方:
vim /etc/rsyslog.conf
*.* @172.25.254.200 ##"@"表示udp协议发送,“@@”表示tcp协议发送
systemctl restart rsyslog
在日志接受方:
vim /etc/rsyslog.conf
15 $ModLoad imudp ##日志接受模块
16 $UDPServerRun 514 ##开启接收端口
systemctl restart rsyslog
systemctl stop firewalld ##关闭防火墙
systemctl disable firewalld #设定防火墙开机关闭
测试:
在发送方和接受方都清空日志文件
> /var/log/messages
在日志的发送方:
logger test
cat /var/log/messages ##查看日志已经生成
在日志接收方查看:
cat /var/log/messages
(4)日志采集格式的设定
vim /etc/rsyslog.conf
$template LOGFMT,"%timegenerated% %FROMHOST-IP% %sysloogtag% %msg%\n"
%timegenerated% ##显示日志时间
%FROMHOST-IP% 显示主机ip
%syslogtag% 日志记录目标
%msg% 日志内容
\n 换行
*.* /var/log/westos;LOGFMT #在指定的日志中采用LOGFMT格式
$ActionFileDefaultTemplate LOGFMT ##修改系统默认日志采集格式为LOGFMT
cat /var/log/westos
10.时间同步服务
服务名称:chronyd
##在服务端:
vim /etc/chrony.conf
22 allow 172.25.254.0/24 ##允许那些客户端来同步本机时间
29 local stratum 10 ##本机不同步任何主机的时进,本机作为时间源
systemctl restart chronyd
##在客户端:
vim /etc/chrony.conf
server 172.25.254.200 ibrurst ##本机立即同步200主机的时间
systemctl restart chronyd
#测试:
#在客户端
【root@foundation30 ~】# chronyc source -v
210 Number of source = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;一堆东东;;;;;;;;
^* foundation200.ilt.example 10 6 17 36 -3096ns[ -102us] +/- 1417us
11.timedatectl命令
timedatectl #管理系统时间
status ##显示当前时间信息
set-time ##设定当前时间在
set-timezone ##设定当前时区
set-local-rtc 0|1 ##设定是否使用utc时间
list-timezones ##查看是否支持的所有时区
11. journal
(1).journalctl #日志查看工具
-n 3 #查看最近3条日志
-p err #查看错误日志
-o verbose #查看日志的详细参数
--since #查看从什么时间开始的日志
--until #查看到什么时间为止的日志
-o verbose #查看日志的详细参数
(2).如何使用systemd-journald保存日志
默认systemed-journald是不保存系统日志到硬盘的
那么关机后再次开机只能看到本次开机之后的日志
上次关机之前的日志是无法查看的
mkdir /var/log/journal
chgrp systemd-journal /var/log/journal
chmod g+s /var/log/journal
killall -1 systemd-journald
ls /var/log/journal
946cb0e817ea4adb916183df8c4fc817