一. 什么是ssh
1.SSH(Secure Shell)是一种网络安全协议,用于在不安全的网络上提供安全的远程登录和管理服务器的功能。它通过加密和认证机制实现安全的访问和文件传输等业务。
2.SSH的主要目的是替代传统的不安全远程shell协议,如Telnet和FTP,这些协议使用明文传输数据,存在很大的安全隐患. SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。
SSH的工作原理包括以下几个步骤:
1)建立连接:客户端向服务器发送一个包含公钥的请求。
2)身份验证:服务器验证客户端的身份,并生成一个会话密钥。
3)加密通信:客户端和服务器使用会话密钥进行加密通信,确保数据传输的安全性。
3.OpenSSH 是 SSH(Secure Shell)协议的免费开源实现。SSH 协议族可以用来进行远程控制,或在计算机之间传送文件。OpenSSH 提供了一套开源工具,包括安全的 shell 连接、文件传输和端口转发等功能,使用加密技术保证数据安全,支持公钥身份验证。它几乎被所有主流操作系统支持,包括 Linux、macOS、FreeBSD 和其他类 Unix 系统,甚至也有适用于 Windows 的版本。OpenSSH 包含了服务器和客户端的功能,通常被用来实现远程登录和管理(例如通过 SSH 协议进行远程命令执行)、文件传输和端口转发等操作。
二. ssh命令
1.传输文件命令
scp 本地文件路径 username@主机IP:拷贝的目录
scp 1 root@192.168.138.130:/opt
要拷贝对方文件如下(和传输相反):
scp root@192.168.138.130:initial-setup-ks.cfg .
传输文件夹时带-r参数(会将整个文件夹都传输过去):
scp -r 123 root@192.168.138.130:/etc
注:若ssh走的特殊端口需用 -P port(端口号)参数
使用时需要注意是否有其读写权限。
三. 安装openssh
1.监测是否有其软件包
dnf list |grep open ssh
2.window ssh安装
1)windows安装SSH客户端和服务器
在Windows 10及以上版本中,系统自带OpenSSH客户端和服务器。可以通过以下步骤安装:
- 打开“设置” -> “应用和功能” -> “可选功能”。
- 点击“添加功能”,找到并安装“OpenSSH客户端”和“OpenSSH服务器”。
对于Windows 10以下的系统,可以使用第三方SSH客户端,如PuTTY、Cygwin等。
2) 启动并配置SSH服务
安装完成后,需要启动SSH服务:
- 打开“服务”管理器(可以通过运行
services.msc
打开)。 - 找到“OpenSSH SSH Server”服务,右键点击并选择“启动”。
- 确保服务设置为自动启动,以便每次开机时自动运行。
3)配置SSH服务器
SSH服务器的配置文件通常位于C:\ProgramData\ssh\sshd_config
。可以根据需要编辑此文件,例如更改默认端口、启用公钥认证等。
4)使用SSH客户端连接
安装并启动SSH服务后,可以使用命令行或第三方客户端连接到Windows系统:
- 打开命令提示符或PowerShell,输入
ssh username@hostname
,其中username
是Windows用户名,hostname
是Windows主机的IP地址或主机名。 - 如果是第一次连接,系统会提示是否信任主机的指纹,输入“yes”继续。
- 输入Windows用户的密码进行身份验证。
5)使用SSH进行文件传输
可以使用SCP或SFTP命令进行文件传输:
- SCP命令示例:
scp localfile.txt username@hostname:/remote/directory/
- SFTP命令示例:
sftp username@hostname
,进入SFTP会话后,可以使用put
和get
命令上传和下载文件。
6)配置公钥认证
为了实现免密登录,可以配置公钥认证:
- 在客户端生成公钥/私钥对,使用
ssh-keygen
命令。 - 将公钥复制到Windows服务器的
C:\Users\username\.ssh\authorized_keys
文件中。 - 确保
.ssh
目录和authorized_keys
文件的权限设置正确。
四.ssh服务
1.相关命令
systemctl status sshd.service #查看ssh状态
systemctl start sshd.service #启动ssh服务
systemctl stop sshd.service #关闭ssh服务
systemctl reload sshd.service #刷新配置文件
systemctl restart sshd.service #重启ssh服务
systemctl disable sshd.service #关闭开机自动启动
systemctl enable sshd.service #打开开机自动启动
2.openssh登录方式
1)密码登录
- 用户在客户端发起SSH连接请求,服务器会要求输入用户名和密码。这种方式是最传统的登录方式,适用于需要频繁交互的场景。
-
在客户端使用
ssh 用户名@服务器IP
命令连接到远程服务器。 -
系统提示输入密码,输入正确的密码后即可成功登录。
2)公钥登录
这种方式更加安全且便捷,通过生成一对密钥对(公钥和私钥),将公钥上传到服务器,并保存私钥在本地。当需要登录时,只需使用私钥进行加密认证即可
- 具体操作步骤如下:
- ssh-keygen
在安全性角度的思考:key其实并不是安全,假如电脑丢了,同事直接拿你电脑登录,备份key丢失,电脑被植入木马等。
3.提高ssh安全性的方法
1)禁用空密码:确保所有用户账户都有强密码,避免使用空密码或弱密码。
2)修改默认端口:将SSH的默认端口(22)更改为其他端口,以减少被攻击的风险。
3)禁止root用户登录:建议不要允许root用户通过SSH直接登录,而是创建一个具有必要权限的普通用户来执行操作。
4)使用密钥认证代替密码认证:生成并配置SSH密钥对,实现免密码登录。这可以显著提高安全性,因为密钥认证比密码认证更难破解。
5)限制登录用户和IP范围:仅允许特定的IP地址段或白名单中的用户访问服务器,并配置防火墙规则来进一步限制访问。
6)配置空闲超时时间间隔:设置合理的空闲超时时间,当用户长时间未进行任何操作时断开连接,防止恶意攻击者保持连接。
7)定期更新系统和软件:保持SSH安装和系统的最新状态,及时修补已知的安全漏洞。
8)使用多因素认证(MFA) :启用如OATH Toolkit或DuoSecurity等多重身份验证工具,增加额外的安全层。
9)配置TCP Wrappers:利用TCP Wrappers对远程主机进行访问控制,进一步增强安全性。
10)使用自动屏蔽恶意IP的工具:例如Fail2Ban,它可以自动检测并屏蔽多次失败登录尝试的IP地址。
4.清除key
进入文件后清除内容
五.实验
1.修改端口
vi /etc/ssh/ssh_dconfig
2.配置ssh日志
vi /etc/ssh/ssh_dconfig
1)syslogFacility AUTHPRIV 表示当有人使用ssh登录系统时,ssh会记录信息,记录类型为AUTHPRIV,
2)LogLevel INF0 表示设置记录sshd日志信息的级别。
3)syslogFacility 一项,规定了服务日志的性质,也规定了服务日志存储的默认路径,
4)AUTHPRIV表达了日志记录的是包含敏感信息的用户身份验证消息,默认存储于/var/log/secure
3./var/log下各个文件
1)系统日志
/var/log/messages
:这是一个核心系统日志文件,记录了系统启动、运行过程中的各种信息,包括内核消息、系统服务启动和停止的消息、硬件故障等。例如,网络连接问题、文件系统错误等也会在这里记录。/var/log/syslog
:类似于messages
,但可能会包含一些不同类型的系统消息。一些发行版可能将特定类型的消息记录在这里,而不是messages
。
2)内核日志
/var/log/dmesg
:记录内核启动时的消息和硬件检测信息。可以查看硬件设备的初始化情况、内核模块的加载情况等。
3)安全日志
/var/log/secure
:主要记录与系统安全相关的事件,如用户登录、身份验证失败、权限变更等。对于追踪系统的安全状况非常重要,可以帮助管理员发现潜在的安全漏洞和未经授权的访问尝试。
4)邮件服务器日志
/var/log/maillog
:如果系统上运行着邮件服务器,这个文件会记录邮件的发送、接收和处理过程中的事件。包括邮件传递的状态、错误消息以及与邮件服务器配置相关的信息。
5)Apache Web 服务器日志
/var/log/httpd/access_log
:记录对 Apache Web 服务器的访问请求,包括客户端的 IP 地址、请求的时间、请求的 URL、HTTP 状态码等信息。通过分析这个日志,可以了解网站的访问情况和流量模式。/var/log/httpd/error_log
:记录 Apache Web 服务器运行过程中的错误信息,如配置错误、脚本执行错误、访问权限问题等。有助于排查 Web 服务器的故障。
6)Cron 任务日志
/var/log/cron
:记录由 cron 调度程序执行的任务的输出和错误信息。如果某个 cron 任务出现问题,可以在这里查看相关的日志记录以进行故障排除。
7)系统更新日志
/var/log/yum.log
(对于使用 Yum 包管理器的系统):记录系统使用 Yum 进行软件包安装、更新和删除的操作。可以查看系统软件的变更历史。
8)打印机日志
/var/log/cups/
:如果系统上连接了打印机并使用 CUPS(Common Unix Printing System)打印服务,这个目录下的日志文件会记录打印机的活动和错误信息。
4.日志级别
1)DEBUG
- 含义:用于提供最详细的调试信息,通常在开发和故障排查的早期阶段使用。
- 用途:
- 记录程序内部的详细执行流程,包括函数调用、变量值的变化等,帮助开发人员深入了解程序的运行情况。
- 对于复杂的软件系统,DEBUG 级别的日志可以帮助定位难以发现的问题。
2)INFO
- 含义:提供一般的信息性消息,记录系统正常运行过程中的重要事件和状态变化。
- 用途:
- 系统启动和关闭的消息,如 “系统于 [具体时间] 成功启动”。
- 重要服务的启动和停止信息,例如 “Web 服务器在端口 [具体端口号] 启动”。
- 关键配置的变更记录,如 “更改了网络设置为 [新的设置参数]”。
3)NOTICE
- 含义:表示需要引起注意的事件,但不一定是错误情况。通常用于记录一些不太常见但重要的系统行为。
- 用途:
- 记录系统资源使用接近临界值的情况,如 “内存使用率达到 80%”,提醒管理员关注系统性能。
- 特殊的系统事件,如软件升级的通知、安全策略的变更等。
4) WARN
- 含义:表示出现了潜在的问题或不期望的情况,但系统仍能继续运行。
- 用途:
- 检测到可能影响系统性能或稳定性的情况,如 “磁盘空间不足”。
- 配置文件中的某些设置可能导致问题,但系统可以继续运行,如 “配置文件中的参数 [具体参数] 值可能导致性能下降”。
5)ERROR
- 含义:表示出现了错误情况,导致系统的某些功能无法正常执行。
- 用途:
- 记录导致服务中断或功能失效的错误,如 “数据库连接失败”。
- 应用程序中的异常情况,如 “文件读取错误”。
6)CRITICAL(FATAL)
- 含义:表示出现了非常严重的错误,可能导致系统崩溃或无法恢复的情况。
- 用途:
- 记录导致系统停止运行或需要立即采取紧急措施的重大错误,如 “内核错误导致系统崩溃”。
- 关键服务无法启动或出现严重故障,如 “安全系统启动失败,可能导致系统面临安全风险”。
7)ALERT
- 含义:它意味着出现了非常严重且可能对系统的正常运行、安全性或稳定性造成重大威胁的情况。
- 用途:
- 安全漏洞被利用:例如检测到系统被黑客攻击,重要数据可能正在被窃取或系统被恶意控制。如 “检测到未经授权的访问尝试,可能存在安全漏洞被利用的情况”。
- 关键服务故障:如果核心服务如数据库服务器、网络核心组件等出现严重故障,影响到整个系统的运行。例如 “数据库服务器停止响应,所有依赖该数据库的服务受到影响”。
- 硬件故障:当重要硬件设备出现严重故障,可能导致系统崩溃或数据丢失。比如 “主存储设备出现严重错误,数据面临丢失风险”。
8)EMERG(emergency)
-
含义:“EMERG” 级别表示系统处于严重的危机状态,需要立即采取行动以避免系统崩溃或不可恢复的损失。
-
用途:
-
系统崩溃:例如内核出现严重错误导致系统无法正常运行,“内核错误导致系统崩溃,进入紧急状态”。
-
重大安全事件:如系统被恶意软件完全控制,关键数据被加密无法访问等极端情况,“系统遭受严重的勒索软件攻击,所有数据被加密,进入紧急状态”。
-
硬件故障危及系统:当关键硬件设备出现灾难性故障,可能导致系统立即停止运行,如 “主存储设备完全损坏,系统无法继续运行”。
-
不同的应用程序和服务可能会根据自身的需求定义和使用这些日志级别,通过合理设置日志级别,可以在不影响系统性能的前提下,有效地监控和管理 Linux 系统的运行状态。
5.禁止root登录
vi /etc/ssh/sshd_config
其中PermitRootLogin 后yes改为no,#号去掉
注:centos8后不适用,需改/sshd_config.d下文件
6.配置长时间无人操作自动断开服务
vi /etc/ssh/sshd_config
其中LoginGraceTime 2m 后yes改为no,#号去掉图中默认俩分钟,可以调成自己所需要的值
在/etc/profile这个配置文件的末尾加上
export TMOUT=10 #单位是秒
执行 sourece /etc/profile命令,使配置文件生效
7.ssh监控日志
默认在/etc/log/secure
tail -f /etc/log/secure 可以自定义日志类型