Linux网络服务远程访问及控制SSH

本文详细介绍了SSH服务(包括服务器、优点和客户端),远程管理方法,服务配置与安全管理,特别是密钥对验证和TCPwrappers的使用。重点讲解了如何提升SSH安全性,如密钥对加密、配置最佳实践及避免登录警告。
摘要由CSDN通过智能技术生成

目录

一、SSH服务

1.1 SSH 服务器

1.2 SSH 的优点

1.3 SSH 客户端和服务端

二、SSH 远程管理

2.1远程管理

2.2 SSH远程登录方式

三、服务配置与管理

3.1 服务配置

3.2 安全调优

3.3加强安全级别的操作

3.4 sshd服务支持两种验证方式

3.5 scp安全性复制

3.6 安全性传输sftp

四、配置密钥对验证

4.1 密钥对

4.2 tcp wrappers

五、总结


一、SSH服务

1.1 SSH 服务器

SSH( Secure Shell )是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能

SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令

SSH 是建立在应用层和传输层基础上的安全协议

1.2 SSH 的优点

SSH客户端 <------------网络------------> SSH服务端

数据传输是加密的,可以防止信息泄露
数据传输是压缩的,可以提高传输速度

1.3 SSH 客户端和服务端

SSH 客户端:Putty、Xshell、CRT、Mobaxterm、Finalshell
SSH 服务端:OpenSSH

OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、Linux 操作系统

CentOS 7 系统默认安装openssh相关软件包,并将sshd服务添加为开机自启动。
执行“systemctl  start  sshd”命令即可启动sshd服务

sshd服务默认使用的是 TCP 的 22 端口,安全协议版本sshv2,除了2之外还有1(有漏洞)

sshd 服务的默认配置文件是 /etc/ssh/sshd_config 
ssh_config 和sshd_config 都是 ssh 服务器的配置文件,
二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件

ssh 服务端主要包括两个功能:1.ssh远程链接、2.sftp服务
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制、或者在计算机之间传送文件。
相较于之前用 Telnet 方式来传输文件要安全的多,因为 Telnet 使用明文传输,SSH 是加密传输

服务名称:sshd
服务主程序: /usr/sbin/sshd
服务端配置文件: /etc/ssh/sshd_config

二、SSH 远程管理

2.1远程管理

  远程管理Linux系统基本上都要用到ssh,原因很简单:telnet、FTP等传输方式是以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。
  SSH( Secure Shell )目前较可靠,是专为远程登录会话和其他网络服务提高安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗

OpenSSH 常用配置文件有两个 /etc/ssh/ssh_config 和  /etc/ssh/sshd_configetc

ssh_config:为客户端配置文件,设置与客户端相关的应用可以通过此文件实现
sshd_config:为服务器端配置文件,设置与服务端相关的应用可通过此文件实现


2.2 SSH远程登录方式

登录 方法一:
ssh [远程主机用户名] @  [远程服务器主机名或 ip地址]    -p    port
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root ,而连接另一台主机时也是用 root 用户的情况下 , 
可以直接使用ssh ip , 端口默认即可,如果端口不是默认的情况下,可以使用 -p 指定端口

示例:
[root@localhost ~]# ssh root@192.168.40.10
The authenticity of host '192.168.40.10 (192.168.40.10)' can't be established.
ECDSA key fingerprint is SHA256:GdV76OZjE8Yr18qjkUPC8cAkLZZuGo+/LInboOzq5Uo.
ECDSA key fingerprint is MD5:80:48:0c:12:58:02:23:23:e2:d1:f5:b6:53:f8:75:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.40.10' (ECDSA) to the list of known hosts.
root@192.168.40.10's password: 
Last login: Thu Apr 21 09:15:45 2022 from 192.168.40.17



登录 方法二:
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)

示例:
[root@localhost ~]# ssh -l root 192.168.40.10
root@192.168.40.10's password: 
Last login: Thu Apr 21 09:16:33 2022 from 192.168.40.10

 

The authenticity of host '192.168.40.10 (192.168.40.10)' can't be established.
ECDSA key fingerprint is SHA256:NG2cLlNWsU95u3ntOrox/X++CT4KFvDSFAYwJPl8L1M.
ECDSA key fingerprint is MD5:77:3c:75:25:ce:ed:88:67:3d:b1:15:0e:46:7c:a4:0e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.40.10' (ECDSA) to the list of known hosts.
Authentication failed

 

ssh会把你每个你访问过计算机的公钥(publickey)都记录在 ~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同, OpenSSH 会发出警告,避免你受到 DNS Hijack 之类的攻击。

解决办法
1.使用ssh连接远程主机时加上 “-o strictHostKeychecking=no” 的选项,如下:
ssh -o strictHostKeychecking=no 192.168.xxx.xxx

2.一个彻底去掉这个提示的方法是,修改/etc/ssh/ssh_config文件(或$HOME/.ssh/config)中的配置,添加如下两行配置:
StrictHostKeychecking no
UserKnownHostsFile /dev/null

原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一个ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots 文件中,切换该系统后再用 ssh 访问这台主机就会出现冲突警告,需要手动删除修改known_hsots 里面的内容
 

三、服务配置与管理

3.1 服务配置

监听端口修改
实验
设置SSHD监听端口号。

SSH 预设使用22这个port,也可以使用多个port,即重复使用port 这个设定项
例如想要开放SSHD端口为22和222,则多加一行内容为:Port 222即可。
然后重新启动SSHD这样就好了。建议大家修改port number为其它端口,防止别人暴力破解。

ListenAddress监听地址
ListenAddress 0.0.0.0
设置SSHD服务器绑定的IP地址,0.0.0.0表示侦听所有地址
安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址
这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0表示所有IP。

  Protocol 2
设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2

  UseDNS yes
一般来说,为了要判断客户端来源是正常合法的,因此会使用DNS 去反查客户端的主机名,但通常在内网互连时,该基设置为no,因此使联机速度会快些。
注:禁用DNS反向解析,以提高服务器的响应速度。

  SyslogFacility AUTHPRIy
当有人使用SSH登入系统的时候,SSH
会记录信息,这个信息要记录的类型为AUTHPRIV,sshd 服务日志存放在:/var/log/secure。
 

3.2 安全调优

  LoginGraceTime 2m
grace意思是系统给与多少秒来进行登录。(默认2分钟,0表示无限制)
当使用者连上SSH server之后,会出现输入密码的画面,在该画面中。
在多久时间内没有成功连上SSHserver就强迫断线!若无单位则默认时间为秒。可以根据实际情况来修改。

  PermitRootLogin yes
是否允许root登入,默认是允许的,但是建议设定成no,真实的生产环境服务器,是不允许root
账号直接登陆的,仅允许普通用户登录,需要用到root 用户再切换到root 用户。


   PasswordAuthentication yes
密码验证当然是需要的!所以这里写yes,也可以设置为no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。

   PermitEmptyPasswords no
是否允许空密码的用户登录,默认为no,不允许空密码登录。

   PrintLastLog yes
显示上次登入的信息!默认为yes

   MaxAuthTries 6
指定每个连接最大允许的认证次数。默认值是6 。
如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息
默认3次
验证ssh -o NumberofPasswordPrompts=8 lisi@192.168.10.9

   AllowUsers
黑白名单
当希望只允许或禁止某些用户登录时,可以使用AllowUsers或 DenyUsers配置,两者用法类似(注意不要同时使用) 。

3.3加强安全级别的操作

1.对未经过安全认证的RPM包进行安全检查Linux用户方面的加固
2.设定密码策略 20位
3.对用户密码强度的设定
4.对用户的登录次数进行限制
5.禁止root用户远程登录
6.设置历史命令保存条数和账户超时时间
7.设置只有指定用户组才能使用su命令切换到root用户
8.对Linux账户进行管理
9.对重要的文件进行锁定,即使root用户也无法删除
10.建立日志服务器
 

3.4 sshd服务支持两种验证方式

1.密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
2.密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在 shell
中被广泛使用。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用

免密登录
ssh-agent bash #将公钥添加管理在客户端操作
ssh-add

3.5 scp安全性复制

scp: scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,而且scp传输是加密的。

1.本地文件复制到服务器
scp ys root@192.168.40.10:/opt

2.复制服务器的文件到本地
scp root@192.168.40.10:/opt/test/ ./

3.本地目录复制到服务器
scp -r 1234/ root@192.168.40.10:/opt

3.6 安全性传输sftp

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp有着几乎一样的语法和功能。SFTP 为SSH的其中一部分,其实在sSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP
 

sftp root@192.168.40.10  //登陆到服务器

get下载
get anaconda-ks.cfg  /home/

put上传
put abc.txt        //默认时会上传的/root
put abc.txt  /home/


查看可用命令
help       //查看sftp可使用的命令和用途打印服务器当前位置
pwd   打印当前服务器所在位置
lpwd  打印当前本地位置

切换目录、查看文件
cd         //切换服务器上的目录
ls         //查看当前目录下文件列表

下载文件、退出sftp
get          //下载文件
get -r       //下载目录
quit         //退出sftp
put          //上传文件
退出命令: quit、exit、 bye 都可以

四、配置密钥对验证

4.1 密钥对

1.在客户端创建密钥对
通过ssh-keygen.工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DSA等
ssh-keygen命令的“-t"选项用于指定算法类型)。

useradd admin

passwd admin    
或
echo "123123" l passwd --stdin  admin

su - admin

ssh-keygen -t ecdsa

Generating public/private ecdsa key pair
Enter file in which to save the key ( / home/ admin/ .ssh/id_ecdsa):  // 指定私钥位置,直接回车使用默认位置

Created directory ' /home /admin/.ssh'            //生成的私钥、公钥文件默认存放在宿主目录中的隐藏目录.ssh/

Enter passphrase (empty for no passphrase):       //设置私钥的密码

Enter same passphrase again:                      //确认输入

ls -l ~ /.ssh/id_ecdsa*

#id_ecdsa是私钥文件,权限默认为600;


id_ecdsa.pub是公钥文件,用来提供给SSH服务器

2.将公钥文件上传至服务器

scp  ~/.ssh/id_ecdsa.pub root@192.168.40.10: / opt
或
此方法可直接在服务器的/home/zhangsan/.ssh/目录中导入公钥文本
cd  ~/.ssh/
ssh-copy-id -i id_ ecdsa.pub zhangsan@192.168.40.10

3.在服务器中导入公钥文本

mkdir /home/zhangsan/.ssh/

cat /opt/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys

cat /home/ zhangsan/.ssh/ authorized_ keys

4.在客户端使用密钥对验证

​
ssh zhangsan@192.168.40.10
Enter passphrase for key ’ /home/admin/.ssh/id_ecdsa’ :#输入私钥的密码

​

5.在客户机设置ssh代理功能,实现免交互登录

ssh-agent bash        //开启ssh代理功能
ssh-add               //添加大秘钥到ssh-agent缓存
Enter passphrase for / home / admin/ .ssh/id_ecdsa:                 //输入私钥的密码
ssh zhangsan@192.168.40.10

4.2 tcp wrappers

TCP Wrappers 访问控制
TCP Wrappers(TCP封套)

在Linux系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、HTTPD、OpenSSH 等TCP wrappers 将 TCP 服务程序"包裹"起来,代为监听TCP服务程序的端口,增加了
一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
 

[root@localhost opt]# rpm -q tcp_wrappers     //一般系统会默认安装
tcp_wrappers-7.6-77.el7.x86_64   ###该软件包提供了执行程序tcpd和共享链接库文件 libwrap.so.*
TCP wrapper保护机制:通常由其他网络服务程序调用 libwrap.so.* 链接库比如sshd

[rootelocalhost opt]# ldd /usr/sbin/sshd l grep "libwrap”          //使用 ldd 命令可以查看程序的共享库
libwrap.so.0 =>/lib64 / libwrap.so.0 (ox00007fc35d8f8000)

TCP wrappers访问控制
TCP wrappers ( TCP封套)
将TCP服务程序"包裹"起来,代为监听TcP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
大多数Linux发行版,TCP wrappers是默认提供的功能。rpm -q tcp_wrappers

TCP wrappers保护机制的两种实现方式
1.直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序。
2.由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序。此方式的用更加广泛也更有效率。
使用ldd命令可以查看程序的libwrap.so.*链接库
ldd $ ( which ssh)

语法格式:<服务程序列表>:<客户端地址列表>
1.服务程序列表服务程序列表可分为以下几类。
ALL:代表所有的服务。
单个服务程序:如 “vsftpd”。
多个服务程序组成的列表:如"“vsftpd,sshd”。

客户端地址列表

ALL:代丧任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符"*”和"?”,前者代表任意长度字符,后者仅代表一个字符网段地址
如"192.168.80.*”或者192.168.80.0/255.255.255.0
区域地址,如". benet.com"匹配benet.com域中的所有主机。

访问控制的基本原则
首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;否则继续查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略,则允许访问。

“允许所有,拒绝个别”
只需在/etc/hosts . deny文件中添加相应的拒绝策略
“允许个别,拒绝所有”
除了在/etc/hosts . allow中添加允许策略之外,还需要在/etc/hostsdeny文件中设置"ALL:ALL"的拒绝策略。
 

实例:
若只希望从ip地址为12.0.0.1的主机或者位于192.168.80.0/24网段的主机访问sshd服务,其他地址被拒绝。

vi /etc/hosts.allow
sshd:12.0.0.1,192.168.80.*
vi /etc/hosts.deny
sshd:ALL

五、总结

1.SSH服务的功能及其优点

2.SSH的远程管理

3.SSH的服务配置与管理

4.密钥的配对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值