ssh密钥验证

ssh密钥验证

  • SSH远程管理服务
    • 1,定义
    • 2,SSH支持的客户端和服务端
    • 3,配置文件
  • SSHD服务验证
    • 两种验证方式
      • 1.密码验证
      • 2.密钥对验证
    • 公钥和私钥的关系
      • 1.开启密钥和密码验证
      • 2.使用SSH客户端程序
      • 3.scp远程复制
    • sftp(安全ftp)
  • 配置密钥对验证
    • 1,在客户端创建密钥对
    • 2.查看密钥位置
    • 3.查看公钥文本
    • 4.将公钥文件上传至服务器并且导入
    • 5.最后进行密钥验证登录
  • TCP Wrapper(访问控制)
    • 定义
    • TCP Wrapper保护机制的两种实现方式
    • TCP Wrapper的格式
      • (1)服务程序列表
      • (2)客户端地址列表
    • TCP wrappers 机制的基本原则:
    • 示例

SSH远程管理服务

1,定义

  • SSH是一种安全通道协议,是用来实现字符界面的远程登陆,远程复制等功能的,我们日常生活可以使用该功能来进行远程操控,省去了很多麻烦。

  • SSH协议对通信双方的数据进行了加密处理,其中包括用户登陆时输入的用户口令。因此SSH协议具有很好的安全性

2,SSH支持的客户端和服务端

  • SSH客户端:Putty,Xshall,CRT
  • SSH服务端:OpenSSH

3,配置文件

  • 我们正在使用的centos7系统已经默认安装openssh相关的软件包,并且已经将sshd服务添加为开机自启。

  • 执行“systemctl start sshd”命令即可启动sshd服务

  • sshd服务默认使用的是TCP的22端口

  • sshd服务的默认配置文件为/etc/ssh/sshd_config
    注:ssh_config和sshd_config都是ssh服务器的配置文件前者是
    针对客户端的配置文件,后者则是针对服务器的配置文件

    下面是sshd_config的重要配置

Port 22                                         #监听端口22
ListenAddress 0.0.0.0                  #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP

LoginGraceTime 2m                       #登陆验证时间为2分钟
PermitRootLogin no                        #禁止root用户登录
MaxAuthTries 6                               #最大重试次数为6

PermitEmptyPasswords no              #禁止空密码用户登录
UseDNS no                                       #禁止DNS反向解析,以提高服务器的响应速度

ssh密钥验证_第1张图片
ssh密钥验证_第2张图片

在这里插入图片描述

ssh密钥验证_第3张图片

示例

#只允许zhaohua,muzi,用户登录,且其中muzi用户仅能够从ip地址为192.168.199.30的主机远程登陆
AllowUsers zhaohua [email protected]     #多个用户以空格分离


#禁止某些用户登录,用法和Allowusers类似(不要同时使用)
Denyusers zhaohua

SSHD服务验证

两种验证方式

1.密码验证

最基本的对服务器中本地系统用户的登录名称,密码进行验证。非常简单,但容易被破解。所以我们不推荐如此使用。

2.密钥对验证

要求提供相匹配的密钥信息才能通过验证。通过先在客户端中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器中的之的指定位置。远程登陆时,系统将公钥,私钥进行加密,解密关联验证。能增强安全性,并且还可以免交互登录。

公钥和私钥的关系

  • 公钥和私钥是成双成对的,这两个密钥互不相同,可以互相加密和解密。
  • 不能根据一个密钥来推算出另一个密钥
  • 公钥对外公开,私钥只有私钥的持有人才知道

当我们密码验证和密钥对验证都开启时,优先使用密钥对验证。当然,我们也可以根据实际情况来进行设置验证方式。

1.开启密钥和密码验证

PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes  #启用密钥对验证
AuthorizedKeysFile      .ssh/authorized_keys   #指定公钥库文件

ssh密钥验证_第4张图片

2.使用SSH客户端程序

1,ssh远程登陆

当用户第一次登陆SSH服务器时,必须接受服务器发来的的ECDSA密钥(根据提示输入“yes”)然后再输入密码,验证成功就可以登录了。
命令

ssh  用户@IP地址
例: ssh [email protected]
-p :指定非默认的端口号,缺省时默认使用22端口

ssh密钥验证_第5张图片

3.scp远程复制

  • 下行复制
    命令
scp [email protected]:/etc/locale.conf /root/sshfuzhi.txt  
scp  -r [email protected]:/etc/lvm /root/sshfuzhi.txt  #复制目录时需加-r,表示递归复制

在这里插入图片描述
ssh密钥验证_第6张图片
在这里插入图片描述

  • 上行复制
    命令
scp -r /etc/ssh/ [email protected]:/opt

ssh密钥验证_第7张图片

sftp(安全ftp)

因为ssh使用了加密和解密技术,所以安全性比普通的FTP要高,但是传输速率要更低。
命令

sftp [email protected] #登录到[email protected]
sftp> get [-r] 文件或目录 文件保存位置(可缺省,缺省时代表复制到当前目录)        #当要传输目录时,需要加入-r代表递归复制 ,将远程主机的文件下载到我们的主机上
sftp>put [-r] #将我们本机的文件,上传到远程主机上

首先,我们先要登录到远程主机上面;
ssh密钥验证_第8张图片
登陆后,我们可以利用ls查看对方的目录,或者直接进行传输,将对方的an文件传输到我们的opt目录。

ssh密钥验证_第9张图片
或者使用put指令,将我们主机上面的文件传输到对方主机
ssh密钥验证_第10张图片
上传之后我们可以进行查询,看看是否传输成功。
ssh密钥验证_第11张图片
或者我们可以指定接收目录,将我们的文件传输到该目录
ssh密钥验证_第12张图片

配置密钥对验证

1,在客户端创建密钥对

  • 通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA,ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)

可以先建立一个admin用户

useradd admin
echo "123123" | 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:    #确认输入

ssh密钥验证_第13张图片

2.查看密钥位置

在配置完密钥对之后,我们可以进行查看密钥对来确认,密钥对存放于.ssh中,通过以下命令可以进行查看

ls -l ~/.ssh/id_ecdsa*
-rw------- 1 admin admin 314 12月  9 15:10 /home/admin/.ssh/id_ecdsa
-rw-r--r-- 1 admin admin 189 12月  9 15:10 /home/admin/.ssh/id_ecdsa.pub

ssh密钥验证_第14张图片

3.查看公钥文本

cat authorized_keys #这时已经在.ssh/目录下了,所以使用相对路径

ssh密钥验证_第15张图片

4.将公钥文件上传至服务器并且导入

后面我们就应该将公钥导入服务器中,让服务器与客户端进行配对

ssh-copy-id -i id_ecdsa.pub [email protected]  #可以直接在服务器的/home/zhao/.ssh/目录中导入公钥文本

ssh密钥验证_第16张图片

5.最后进行密钥验证登录

ssh [email protected]  #使用密钥对验证
Enter passphrase for key '/home/admin/.ssh/id_ecdsa':  #输入私钥的密码

ssh密钥验证_第17张图片
在这里插入图片描述

TCP Wrapper(访问控制)

定义

  • 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全检测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能真正访问对应的服务程序。
  • 对于大多是的Linux发行版来说,TCP Wrappers 是默认提供的共嗯那个。

TCP Wrapper保护机制的两种实现方式

  • 1,直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序
  • 2,由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序。此方式的应用更加广泛,也更有效率。

TCP Wrapper的格式

<服务程序列表>:<客户端地址列表>

(1)服务程序列表

ALL:代表所有的服务。
单个服务程序:如“vsftpd"。
多个服务程序组成的列表:如"vsftpd,sshd"。

(2)客户端地址列表

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

TCP wrappers 机制的基本原则:

基本策略

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

常用情况

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

示例

比如我们在192.168.199.0网段中,我们只想让192.168.199.20访问192.168.199.30,需要做如下设置

先在/etc/hosts.allow设置只允许20IP通过
ssh密钥验证_第18张图片

然后再在/etc/ hosts.deny中不允许所有网段通过

ssh密钥验证_第19张图片

之后我们就发现10IP已经无法进入了,但20IP还是可以进入。

在这里插入图片描述
ssh密钥验证_第20张图片

你可能感兴趣的:(ssh密钥验证)