SSH服务详解(2)

本文涉及的产品
云防火墙,500元 1000GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: SSH服务详解(2)

SSH服务详解(1)+https://developer.aliyun.com/article/1557873

2.1、查看、修改ssh服务中的配置文件(配置文件详解)

1、查看配置文件:

#pam认证模块 --》配置路径/etc/pam.d 这个目录下面存放的是每个需要认证的服务的配置,文件名就是服务名

UseDNS yes #是否将客户端主机名解析为ip

#此过程不顺利的话,会非常的慢,会影响登陆认证的速度,可以将其设置为no

[root@nginx-kafka01 etc]# vim /etc/ssh/sshd_config  (修改文件,传递参数)
Port 22                                 #修改默认监听端口(默认22端口)
#AddressFamily any
ListenAddress 0.0.0.0    ##表示可以连接的ip地址:0.0.0.0表示在本机上的任意ip都可以访问
#ListenAddress ::
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
........
#LoginGraceTime 2m
 #设置为运行root用户登录:yes,no就是不允许用户使用root用户进行登录。
PermitRootLogin yes   ##允许root用户登陆,默认为yes   
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes  ##是否开启公钥认证
#UsePAM yes #使用pam认证 
....
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes   #允许密码验证登录
#UseDNS yes  #是否将客户端主机名解析为ip

sshd_config --->sshd服务端的进程

ssh_config ----》ssh客户端命令的配置文件

2、配置文件(/etc/ssh/sshd/config)里面的详解:

denyusers:禁止登录的用户

maxauth tries 6:表示最多能输6次密码。

端口号不能随意更改:因为端口号的范围是从0到65535(2^16次)。

修改配置文件之后(永久修改),根据自己的需求进行修改,修改完成之后需要重启进程:(service sshd restart)

扩展:重启的过程就是kill之前的进程,然后重新启动一个新的进程。

3、重启sshd

三个方法选择其一:

[root@nginx-kafka01 ssh]# service sshd restart
[root@nginx-kafka01 ssh]#systemctl restart sshd
[root@nginx-kafka01 ssh]#restart sshd. service

===扩展===

tail -f secure 盯着文件的末尾看。

[root@nginx-kafka01 log]# grep "Failed password" secure    查看哪些登录失败的

lastlog:查看哪些登录的用户。

[root@nginx-kafka01 ssh]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/3    192.168.2.123    五 7月 29 16:12:45 +0800 2022
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**

如何查看哪些是开机启动的:systemctl list-unit-files

[root@sc-mysql ~]# systemctl list-unit-files
UNIT FILE                                     STATE   
proc-sys-fs-binfmt_misc.automount             static  
dev-hugepages.mount                           static  
dev-mqueue.mount                              static  
proc-sys-fs-binfmt_misc.mount                 static  
sys-fs-fuse-connections.mount                 static  
sys-kernel-config.mount                       static  
sys-kernel-debug.mount                        static  
tmp.mount                                     disabled
brandbot.path                                 disabled
systemd-ask-password-console.path             static  
systemd-ask-password-plymouth.path            static  
systemd-ask-password-wall.path                static

其中 enabled 表示开机就可以启动的,

disabled是不能启动的。

static表示该服务与其他服务相关联,不能单独设置该服务的启动状态,为其他的需要使用的提供支持。

4、设置sshd服务开机自启

systemctl enable sshd 设置开机自启

[root@nginx-kafka01 ~]# systemctl enable sshd  设置开机自启
查看和设置默认的 target   :systemctl get-default
[root@nginx-kafka01 ~]# systemctl get-default    取得目前的 target(运行级别)
multi-user.target
[root@nginx-kafka01 ~]# cd /etc/systemd/system
[root@nginx-kafka01 system]# ll
总用量 4
drwxr-xr-x. 2 root root   57 2月  26 18:01 basic.target.wants
lrwxrwxrwx. 1 root root   46 2月  26 18:01 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root   57 2月  26 18:01 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   37 2月  26 18:06 default.target -> /lib/systemd/system/multi-user.target

3、查看sshd服务是否启动

1、看进程

2、看端口  

3、直接访问

4、看日志

3.1、 查看进程

ps -aux |grep ssh或者 ps -ef|grep ssh

1、查看进程
[root@localhost acl]# ps -ef |grep ssh  查看进程
root       6858      1  0 09:28 ?        00:00:00 /usr/sbin/sshd -D
root       7379   6858  0 09:29 ?        00:00:00 sshd: root@pts/0
root       7398   6858  0 09:29 ?        00:00:00 sshd: root@pts/1
root       8020   7722  0 11:37 pts/1    00:00:00 grep --color=auto ssh
[root@localhost acl]# pidof sshd 查看进程号,有就已经启动
7398 7379 6858

3.2 看端口(需要知道端口号)

lsof -i:端口号、netstat -anplut |grep 端口号

[root@localhost acl]# lsof -i:22   查看端口号的(需要知道端口号)
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    6858 root    3u  IPv4  37869      0t0  TCP *:ssh (LISTEN)
sshd    6858 root    4u  IPv6  37878      0t0  TCP *:ssh (LISTEN)
sshd    7379 root    3u  IPv4  39374      0t0  TCP localhost.localdomain:ssh->192.168.119.1:50371 (ESTABLISHED)
sshd    7398 root    3u  IPv4  39493      0t0  TCP localhost.localdomain:ssh->192.168.119.1:50374 (ESTABLISHED)
[root@localhost acl]# netstat -atpln |grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6858/sshd           
tcp        0     36 192.168.119.137:22      192.168.119.1:50374     ESTABLISHED 7398/sshd: root@pts 
tcp        0      0 192.168.119.137:22      192.168.119.1:50371     ESTABLISHED 7379/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      6858/sshd

0.0.0.0:22表示在本机所有ip上监听22端口。

0.0.0.0:* 表示允许任意ip,任意端口客户端来连接。

3.3  直接访问

直接输入ssh  +目标主机地址 的登录指令。

3.4 看日志

日志文件存放路径:/var/log/secure

/var/log:系统的所有日志存放位置,里面存放的文件为:

/var:-----variable 变量

/etc:--诸如此类,其他

log:日志

①bot里面存放启动,②messages里面存放普通,③secure存放与安全相关:存放④audit:安全审计服务

/var/log/secure 里会记录sudo执行的命令,可以查询到。

/var/log/audit 安全审计相关服务日志(audit.log)

auditctl

Linux的audit审计系统是提供系统中上事件的各种动作和事件,比如系统调用,文件修改,执行的程序。(只用于记录,不会进行安全问题组织)

audit的学习网站:https://zhuanlan.zhihu.com/p/337289840

扩展知识点:

查看命令属于哪个包:

root@sanchuang ~]# ①which netstat  #找到命令的绝对路径
/usr/bin/netstat
[root@sanchuang ~]# rpm -qf /usr/bin/netstat  #查看这个绝对路径执行文件属于哪个包
net-tools-2.0-0.51.20160912git.el8.x86_64
②或者yum provides netstat

所有的服务都是一个程序:

ssh中关闭服务,客户端连接还在 systemctl stop sshd。

4、故障排查

如果修改配置文件之后,重启也没生效的话,就需要进行排查。建议进行关闭selinux和防火墙。

4.1、selinux是什么

selinux是Linux系统里的一套安全机制,用来保护Linux系统的安全,会限制进程去做某些对安全有威胁的事情,永久修改selinux的策略为disable。

1、getenforce:查看selinux的状态,临时修改selinux的策略。

[root@nginx-kafka01 ssh]# getenforce
Disabled  (如果是enforcing,要修改为disable)
[root@nginx-kafka01 ssh]# setenforce 0   #临时调整selinux的策略为宽容模式
[root@nginx-kafka01 ssh]# getenforce
Permissive

2、永久修改selinux的策略:修改配置文件:

[root@nginx-kafka01 selinux]# cat /etc/selinux/config (可以在/etc/selinux/config文件下面进行永久修改)
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

4.2、关闭防火墙

修改完之后,需要关闭防火墙。systemctl disable firewalld或者service  disable firewalld。

root@localhost ssh]# systemctl firewalld stop  关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service

经常需要给openssh进行升级,如何保证Linux系统的安全?

yum update openssh openssh-clients openssh-server

三、ssh服务器加固

①修改端口

②禁用root用户

③ 升级openssh

④秘钥认证:需要进行配置

⑤密码认证:默认开启的:经常更换密码+设置复杂的密码

比如禁用root用户:

前提条件是PermitRootLogin no 允许用户登录设置为no:

指定root用户去xshell中登录sshd的登录不了(因为设置了不允许root用户登录),而在xshell中使用普通用户先登录进去之后,再切换成root用户登录之后就能登录的原因:因为使用普通用户登录xshell之后已经进入了Linux系统里面,再使用su -root切换到root用户的时候不需要进过ssh登录认证,因为它已经进入到bash进程中了。

四、ssh服务远程登录流程

1、登录流程图为:

ssh服务登录流程详解:一个客服端client(xshel)通过使用用户名(root)和密码(123456)进行登录的话,通过sshd服务进行登录认证:sshd服务会去sshd_config文件下面查看是否允许root用户登录,如果允许的话,就会去Linux系统中(server)的/etc/passwd 和/etc/shadow文件中查看输入的用户名和密码是否正确。本地登录访问的是Linux系统里面的/etc/passwd 和/etc/shadow,不需要进行ssh服务登录认证。

2、扩展:如何将一个连接到自己的ssh的普通用户踢出去:杀死其所对应的进程。

根据终端号找到对应的bash进程,然后kill进程。比如:

[root@nginx-kafka01 system]# w (查看到连接的用户)
 11:37:20 up  2:12,  4 users,  load average: 0.00, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:39    1:57m  0.01s  0.01s -bash
root     pts/0    192.168.2.118    09:25    0.00s  0.03s  0.00s w
root     pts/1    192.168.2.118    10:14    9:12   0.06s  0.06s -bash
root     pts/2    192.168.2.144    11:37   18.00s  0.00s  0.00s -bash
[root@nginx-kafka01 system]# ps -aux|grep bash (查看bash进程:pts/2,对应的终端号是:8591)
root       7852  0.0  0.2 115676  2048 pts/0    Ss   09:25   0:00 -bash
root       7879  0.0  0.2 115668  2072 tty1     Ss+  09:39   0:00 -bash
root       8081  0.0  0.2 115756  2228 pts/1    Ss+  10:14   0:00 -bash
root       8591  0.0  0.2 115672  2080 pts/2    Ss+  11:37   0:00 -bash
root       8609  0.0  0.0 112824   988 pts/0    R+   11:38   0:00 grep --color=auto bash
[root@nginx-kafka01 system]# kill -9 8591  (杀死对应的进程),连接上的用户就会马上断开
[root@xieshan ~]#    连接断开的样子:
Connection closed.

下一篇将会详细讲解ssh服务的两种登录方式。

相关文章
|
2月前
|
安全 Linux Shell
Linux SSH(Secure Shell)服务
Linux SSH提供安全网络协议,使用公钥加密技术确保远程服务传输安全。OpenSSH是实现SSH服务的免费开源工具,允许用户加密连接远程登录Linux服务器执行任务。SSH比Telnet更安全,防止数据被截获。SSH还支持端口转发和隧道,广泛应用于系统管理和网络维护,是安全远程访问服务器的重要工具。
40 1
|
2月前
|
Ubuntu Linux 网络安全
【计算机网络】SSH 服务安装
【1月更文挑战第10天】【计算机网络】SSH 服务安装
|
8月前
|
监控 数据可视化 安全
Linux——怎样使用SSH服务实现远程UI界面本地显示
需求场景 最近几天需要实现软件的远程监控,但是实际场景又不能使用向日葵、VNC、AnyDesk、以及其他的监视软件,并且软件的整体设计也没有这块的数据上行设计。
276 0
|
9月前
|
安全 Linux 网络安全
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
163 0
|
4天前
|
监控 网络协议 网络安全
ssh服务中如何批量管理100多台机器(Paramiko、 psutil模块)、跳板机(堡垒机)
ssh服务中如何批量管理100多台机器(Paramiko、 psutil模块)、跳板机(堡垒机)
|
4天前
|
安全 Unix Linux
|
9天前
|
网络协议 Linux Shell
如何在 CentOS 中配置 SSH 服务的 TCP 端口转发
如何在 CentOS 中配置 SSH 服务的 TCP 端口转发
17 0
|
2月前
|
网络协议 安全 Shell
配置ssh服务
配置ssh服务
|
2月前
|
安全 Linux 网络安全
Linux加强篇009-使用ssh服务管理远程主机
山重水复疑无路,柳暗花明又一村
275 0
Linux加强篇009-使用ssh服务管理远程主机
|
2月前
|
Ubuntu 网络安全
Ubuntu 开启 SSH 服务
Ubuntu 开启 SSH 服务
53 0