前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第二章 SSH服务

第二章 SSH服务

作者头像
晓天
发布2019-07-04 14:25:32
1.2K0
发布2019-07-04 14:25:32
举报

第二章SSH服务

2.1 SSH协议

2.1.1 SSH简介

SSH,全称“Secure Shell”,即安全外壳,用于远程连接、登录。

在SSH之前,一直使用telnet进行远程连接(端口为TCP:23),但由于telnet在进行数据传输时是明文传输,不安全,因此采用加密传输的ssh(端口为TCP:22)

其实CentOS7的系统光盘中是有telnet的安装包的,但安装系统时,默认只安装ssh服务,telnet因为安全性不高,默认不安装。即便在windows系统中,win7以后的版本默认也不安装telnet服务了。

2.1.2 基本实验

下面先来看一下ssh的基本部署步骤:

首先需要两台Linux主机(可以是两台虚拟机),都配置好ip,如:192.168.10.10和192.168.10.11。我们以192.168.10.100的主机作为服务器。

服务器端配置:

1、安装软件包

yum –y install openssh openssh-clients openssh-server

注:依次为主程序包、客户端包、服务器包,一般Linux系统作为ssh服务器的同时,也经常要登录其他主机,所以为了方便工作,建议三个包都装。其实在安装CentOS 7的服务器时,ssh的相关软件已经默认安装

2、启动服务

systemctl restart sshd ---启动ssh服务

注:其实系统默认已经启动了。

3、关闭防火墙

iptables -F ---关闭iptables防火墙

systemctl stop firewalld ---关闭firewalld防火墙

setenforce 0 ---关闭selinux

注:CentOS7默认防火墙不屏蔽ssh访问,所以不关闭也可以

iptables、firewalld、selinux后面章节会详述

客户端配置:

1、安装软件包

yum –y install openssh openssh-server openssh-clients

2、登录

格式:ssh 用户名@服务器的IP/主机名

示例:ssh 192.168.10.10

---登录服务器,默认以当前自己的用户名登录服务器

注:会提示是否确定建立连接,输入yes即可,如下图:

图中,输入yes以后,要求输入root在192.168.10.10上的密码,因为客户端当前登录账号为root。则会使用root登录服务器,若客户端当前用户为zhang,则会要求输入zhang在服务器上的密码,但是如果服务器端没有zhang这个用户的话,则会登录失败。那么则需要指定用户登录服务器,命令如下:

ssh root@192.168.10.10 ---指定用户登录服务器

登录成功后则会显示服务器端的命令提示符,说明正在控制服务端。

exit ---输入该命令退出远程ssh登录

3、服务器查看

客户端登录成功后,服务器可使用w命令查看到客户端的登录状态:

4、windows客户端访问

服务器端部署好后,在windows客户端可以下载xshell、secureCRT、 putty等远程ssh登录工具登录即可,在这里值得注意的是,学习过程中,会使用真实机windows去连接Linux虚拟机的ssh,那么必须遵守上一章讲过了虚拟机与真实机连接的技术,大家可以参考研究一下。windows客户端软件的使用,如:xshell,在实际生产环境中使用颇多,大家一定多加练习与熟悉。

2.1.3 ssh访问控制

默认系统中所有用户都允许在ssh登录时使用,但是我们也可以对其进行限制。服务器端的配置文件是:/etc/ssh/sshd_config(注:该目录下还有一个文件/etc/ssh/ssh_config,是作为客户端的配置文件,在服务器上做管理需要配置服务器配置文件,不要写错了),可以编辑配置它,常用案例如下:

vi /etc/ssh/sshd_config 写入

PermitRootLogin no ---拒绝root用户使用ssh登录

AllowUsers zhang moon ---仅允许zhang和moon使用ssh登录

DenyUsers zhang ---拒绝指定的用户使用ssh登录

注:当denyusers与allowusers冲突时,以denyusers为准

AllowUsers moon@192.168.10.11 ---仅允许moon在10.11上登录

注:此项设置后,其他用户不允许登录,moon用户只能在10.11上登录。

systemctl restart sshd ---以上配置完毕后,需要重启服务才可以生效

以上配置文件是针对客户端所使用的用户做限制的,建议读者可以逐条验证,以明确配置效果。另外,还可以限制客户端的ip,需要使用系统中针对各种通信访问的控制文件:/etc/hosts.allow、/etc/hosts.deny。在这两个文件中可以针对ssh服务进行ip限制。案例如下:

vi /etc/hosts.allow

sshd:192.168.10.11 ---设置允许访问本机ssh的客户端ip

注:配置该文件后,并不代表拒绝其他ip,需要配合/etc/hosts.deny文件共同完成管理逻辑。

vi /etc/hosts.deny

sshd:ALL #或者写sshd:192.168.10.0/24 指定拒绝的ip段

两个文件配合使用表示仅允许10.11访问ssh,其他ip都拒绝。若两个文件中有设置冲突,则以hosts.allow文件为准。

2.1.4 ssh子系统

1、scp命令

scp命令的功能是:借助于ssh连接,登录后实现远程复制。可以下载文件,也可以上传文件。命令案例如下:

scp root@192.168.10.10:/mnt/f1 /mnt/ ---文件下载

scp /mnt/f2 root@192.168.10.10:/mnt/ ---文件上传

2、sftp登录

sftp登录的功能是:使用sftp登录成功后,上传、下载文件

命令案例:

sftp root@192.168.10.10

登录后,并不是所有shell命令都可以使用的,但基本的pwd、cd、ls命令可以使用,操作、显示的是服务器端信息。也可以在命令前加!表示对当前客户端本机做操作,如:!pwd、!cd !ls。

上传、下载的命令使用put、get,案例如下:

put /mnt/f1 ---上传指定文件到服务器端的当前目录

put -r /mnt/d1 ---上传指定目录到服务器端的当前目录

get /mnt/f2 ---下载指定文件到本机的当前目录

get -r /mnt/d2 ---下载指定目录到本机的当前目录

注:在实际生产环境中,sftp方式的使用率并不是很高,所以暂做了解即可。

2.2 ssh验证方式

以上我们的实验中,客户端直接访问服务器,输入正确的账号、密码后即可登录,那么它是如何验证的呢?又是如何保证安全性的呢?带着这两个问题,我们来介绍一下ssh的登录方式。

2.2.1 加密密钥、密钥对

首先我们来介绍下加密的过程,在做数据加密时,有两个重要的概念:密钥、算法。密钥是加密时需要使用到的一些辅助数据;算法是加密时进行的一个运算过程或运算公式。

举例来讲:假设有密码:123456需要做加密,那么我们来进行最简单的操作,给所有数字+1,即:123456+111111=234567,这里的123456即是原始数据,计算时所用的辅助数据111111就可以视为密钥,而加法操作即是算法。再者,加密算法也有两种分类:可逆加密、不可逆加密。顾名思义,可逆加密就是可以通过算法的逆向操作将数据推回来,即解密,如:加法的逆算法是减法;不可逆算法是无法做逆向计算的,如:md5,hash2算法。

另外,密钥也有一个称为密钥对的概念,又称公钥(共有密钥)、私钥(私有密钥)。这种密钥对加密方式是使用两个并非完全相等的密钥(称为非对称式密钥对),虽然不同,但一个密钥加密,完全可以使用另一个密钥解密。而私钥一般都是本机自己使用的,公钥是发送给其他主机(可发送给多台)使用的,这样这台主机就可以与多台不同的主机加密通信了。

ssh作为安全登录的服务,对账号、密码的传输是加密处理的,采用的是可逆算法。这与telnet的登录原理不同(telnet为明文传输,不加密,安全性低)。ssh在登录时支持两种登录验证方式:直登方式、秘钥对验证方式。

2.2.2 基于口令的登录方式 即直登方式

直登方式是ssh的默认登录方式,客户端连接到服务器后,并不是立即做登录验证的,而是先从服务器端接收加密密钥,然后对账号、密码做加密后再进行登录验证,具体步骤如下:

1、Client=>Server:发送连接请求

2、Server方,生成随机密钥对,将公钥发送给Client

3、Client使用该密钥对登录账号、密码做加密,把加密结果发送给Server

4、Server收到结果后解密,做验证

5、登录成功,后双方使用该密钥对做加密传输

以上,Client登录服务器成功后,会把秘钥存放于:$HOME/.ssh/known_hosts 文件中,其中有服务器ip的指定,如下图:

图中后面一长串的字符即是收到的公钥内容,一般是1024bit。另外,在实际生产环境中,还可能出现当服务器发生更换后,仍使用之前ip,但是客户端中记录的是原服务器的公钥,造成登录失败,此时客户端需要手动进入known_hosts文件,删除相应密钥即可。

此种方式最大的缺点是:账号密码需要透露给相关人员,尤其是需要管理员身份时,root密码容易泄露。所以,在企业中,还有一种方式会更加的安全,就是客户端密钥对验证方式。

2.2.3 客户端密钥对验证

说到密钥对验证,上一种方式也使用的是密钥对,但是密钥对是由服务器生成的,而下面要讲的客户端密钥对方式,顾名思义,密钥对是由客户端生成,大体原理如下:

1、Client本地生成密钥对(公钥、私钥),私钥客户端自己使用,公钥,上传服务器使用

2、Client上传公钥给服务器

3、Server把收到的公钥,导入到公钥记录文件

4、Client使用私钥找服务器做登录,服务器使用公钥与其做验证

5、登录成功后双方使用秘钥对做加密传输

结合上面的步骤,我们来逐步演示一下实验:

客户端配置:

ssh-keygen

---生成密钥对,存放于$HOME/.ssh/下,id_rsa私钥 id_rsa.pub 公钥

---会要求设置密钥的使用密码

图中ssh-keygen后,首先询问是否将密钥存放于/root/.ssh/id_rsa文件中,直接回车即可(当然,可以自定义路径和文件名,一般使用磨人的),然后会要求设置密钥的使用密码,再次输入确认两次密码一致后,密钥即生成成功。当然也可以在要求输入密码时不设置密码,直接回车,即表示密钥无密码

scp ~/.ssh/id_rsa.pub root@192.168.10.10:/root/

---网络复制,上传公钥文件

服务器端配置:

mkdir ~/.ssh ---创建密钥存放目录,若家目录下已有.ssh,则无需创建

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys ---导入到公钥记录文件

注:使用>>追加的目录是不影响公钥文件中原有内容。

PS:以上操作中客户端使用scp上传公钥,服务器导入到公钥文件的操作是为了让读者们了解操作原理与过程,其实无需那么麻烦,客户端生成密钥对后, 使用ssh-copy-id即可自动完成上传及导入工作,具体命令如下:

ssh-copy-id root@192.168.10.10 ---上传公钥,并自动导入客户端登录验证:

ssh 192.168.10.10 或 ssh root@192.168.10.10 ---登录、验证

图中可见,登录时会发现无需输入服务器账号、密码,只需要输入本机密钥的密码即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档