ssh和sshd服务及管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/daidadeguaiguai/article/details/102557243

1.ssh (安全外壳协议)

1)Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。

2)它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。

3)通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

4)ssh传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

5)几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

2.什么是sshd服务?

  • 客户端主机通过网络在服务端主机中开启服务端主机shell的服务。
  • 客户端通过网络连接服务端,并且控制服务端,也就是客户端开启了服务端的shell。

3.演示环境搭建

说明:因本次实验需要两个主机,所以实验之前需要搭建好环境,并且最好是使用虚拟机进行,我选用的两台主机分别是server作为服务端和desktop作为客户端:

###如果主机的ip不知道可以采用命令查看 :###

  • 1.在虚拟机的shell中输入命令  ip addr show eth0  即可查看
  • 2.在真机的shell中输入命令  ip addr show  br0 即可查看

如上图:查出来我的真机ip为:172.25.254.70

第一步:我们先在真机中打开虚拟机:

注意:每一次实验之前都要先对虚拟机进行重置以保证实验环境的纯净

第二步:配置两台主机的ip ,在两台主机里分别使用命令nm-connection-editor进行修改网络配置,desktop主机的ip设为172.25.254.170,用于客户端测试;server主机的ip设为172.25.254.90,用作服务端。

第三步:在两台主机的shell中分别删除 /root/.ssh/(删除这个目录rm -rf /root/.ssh 或者删除这个目录下的文件rm -rf /root/.ssh/*均可以)

删除的原因是:客户端主机第一次连接服务端主机会在这个目录下生成known_hosts这个文件,为了验证这个实验效果,所以先将这个目录清空或者直接删除这个隐藏目录。可直接在家目录下面输入ls -a(查看所有文件,包括非隐藏文件和隐藏文件) 或者l.(只查看隐藏文件)

第四步:改两个主机名字,以便区分:

1.在客户端主机(desktop主机)输入   hostnamectl set-hostname client.westos.com进行改名
2.在服务端主机(server主机)输入   hostnamectl set-hostname server.westos.com进行改名

4.sshd的相关内容

(1)连接方式:(客户端主机连接服务端主机)

文本模式的连接

  1. 客户端可以启用服务端的文本模式功能
  2. 一台主机可以和另外一台主机连接起来,并且可以操作对方的文本模式
  3. 如果是客户端连接服务端,则客户端可以操作服务端的文本模式
  4. 如果是服务端连接客户端,则服务端可以操作客户端的文本模式

命令格式为 ssh username@ip

说明:

1.username为被连接的主机的存在的任意用户,ip是被连接的主机的ip,
     例如:拿谁家的钥匙开谁家的门要搞清楚    
具体操作过程如下:
第一步:删除之前的认证文件

  1. 在客户端主机上输入命令cd,切换到家目录
  2. 命令ls  -a 查看客户端主机文件,如果没有.ssh文件,说明没有连接过远程主机(服务端主机)
  3. 命令ls  -ad   /root/.ssh 直接查看是否有这个文件,如果显示没有,说明没有连过远程主机

第二步:用客户端主机连接服务端主机

在客户端主机中输入: ssh [email protected](server主机的ip)
注意:

  1. 如果是第一次连接的话会问yes或者no-->输入yes
  2. 然后让输入密码:server主机的密码
  3. 连接好之后exit退出

第三步:用client主机重新连接server主机: ssh [email protected](server主机的ip),拿谁家的钥匙开谁家的门 ,不一定是root用户 ,只要是目标主机的存在的可用用户就可以。

这次会直接输入密码,没有问yes或者no,因为已经连接过一次,已经有.ssh文件
连接好之后exit退出

第四步:在客户端主机中查看/root/.ssh/下的文件

  1. cd   /root/.ssh/     切换到该目录下
  2. ls    查看该目录下的文件
  3. 出现known_hosts文件
  4. cat known_hosts 查看该文件的内容,会显示server主机的信息

第五步:在客户端主机中输入 rm -rf known_hosts, 删除该文件。再次重新连接 ssh [email protected] 就会出现yes或者no

                验证了该文件存在的意义

第六步:在客户端打开服务端的文本编辑模式

可以看到在用户端建立的5个文件出现在了服务端,可见客户端可以控制服务端的文本编辑模式了

第七步:再删除刚刚建立的文件

发现服务端的个文件成功被删除了。

需要注意的是:第一次连接陌生主机的时候需要建立认证文(件~/.ssh/know_hosts文件),所以会询问是否建立,输入yes即可.
再次连接次台主机的时候,由于已经生成~/.ssh/know_hosts文件,因此不需要再次输入yes.

连接成功后开启对方的图形编辑模式的连接方式(gedit 、firefox等)
命令格式为: ssh -X username@ip
具体操作过程如下:
第一步:连接上以后在客户端主机里面输入firefox打开远程主机(服务端)的图形界面
我们会发现在客户端主机直接输入firefox 并不能打开服务端主机的图形界面

第二步:先退出文本连接模式,然后再在客户端主机当中输入 ssh -X [email protected],使客户端可以控制服务端主机的图形界面

再在客户端输入firefox发现打开了服务端的firefox浏览器了,说明就可以控制服务端的图形编辑模式了

###怎么完成远程复制###

注意:这里只需要弄清楚两个主机的ip地址就可以,然后使用相关命令就可以实现文件远程复制
但是要保证上传或者下载的文件是必须存在的
还有上传和下载的路径要写正确,为了防止文件混乱,最好统一使用绝对路径

此实验不需要客户端主机控制服务端主机,我们先将之前的连接exit退出,只需要知道对方的ip及存在的帐号和密码就可以进行上传和下载

1)上传文件命令格式:scp file root@ip:dir
   将客户端主机上的file文件复制到远程主机的dir (相当于上传文件)

第一步:在客户端主机的桌面上先建立五个文件 touch file{1…5}

第二步:在客户端主机中输入 scp /root/Desktop/file{1…5} [email protected]:/root/Desktop/ 并回车。可见将客户端的文件上传到了服务端

2)下载命令格式:scp root@ip:file dir

将root ip这台远程主机上的file文件下载到当前主机的dir

第一步:先将客户端和服务端桌面的所有文件都删掉

第二步:在服务端的桌面上建立3个文件 touch file{1…3}

第三步:在客户端主机中输入scp [email protected]:/root/Desktop/file{1…3}  /root/Desktop/ ,然后回车,可见将服务端的文件下载到了客户端

5.sshd服务如何免密操作

免密操作的原因:如果客户端知道服务端主机的ip地址和密码,就可以远程操控服务端
                               如果任意一个客户端知道服务端主机的ip地址和密码,并且知道它里面的重要文件存放路径那么就可以拷贝服务端的文件
                               这样的操作在实际企业当中非常不安全,应该是服务端想让客户端连接才能连上。

第一步:在服务端输入:ssh-keygen ,生成钥匙和密码 , id_rsa是钥匙 id_rsa.pub是锁

      1.在服务端输入 ssh-keygen 三次回车 ,每次回车都有原因
      2.第一次回车是钥匙和密码存放路径(可以直接回车,存放在默认路径下)
      3.第二次回车是密码(可以直接回车,不设置密码)
      4.第三次回车也是密码(可以直接回车,不设置密码)

第二步:在服务端输入:ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]先给自己上锁,也就是给服务端上锁

再在服务端输入scp /root/.ssh/id_rsa [email protected]:/root/.ssh/将密码也就是钥匙传给客户端,客户端/root/.ssh/的这个文件(目录)必须存在 ,相当于上传。
注意:如果客户端没有/root/.ssh/这个文件,客户端使用密码方式重新连接一次服务端,会生成该文件,然后可以将锁传给客户端了

第四步:客户端使用密码方式重新连接一次服务端,会生成该文件,并且退出

第五步:让服务端重新给客户端钥匙,并且查看钥匙是否一致,

 最后:测试一下客户端是否可以免密连接服务端:

                             

发现不需要密码,说明免密连接成功。

6.sshd相关的安全设置

1)安全设置的原因:1.因为服务端的root权限太大,客户端如果使用服务端的root权限极不安全
                                       2.为了保证ssh服务器的安全性:服务端开放的权限不能太多,一般不太让客户端主机用服务端主机的超级用户root

2)常用的安全设定有:

/etc/ssh/sshd_config的第78行       ##是否允许服务端的任意一个存在的用户通过登陆系统的密码做sshd的认证

/etc/ssh/sshd_config的第48行       ##是否允许服务端的root用户通过sshd的服务

加入AllowUesrs student westos     ##设定用户的白名单,此名单里面的用户可以做sshd服务 (文件里不存在 直接输入即可 多个用户用空格隔开)

加入DenyUsers westos                     ##设定用户的黑名单,此名单里面的用户不可以做sshd服务

注意:

  •     每次改完一个参数重启服务才会起作用:在服务端用命令systemctl restart sshd.service即可重启
  •     验证完一个参数之后改回原来的,这样可以保证实验的准确性

3)安全设置步骤:

第一步:先关闭免密操作

第二步:在服务端 打开vim /etc/ssh/sshd_config 这个文件

第三步:验证78行的 PasswordAuthentication yes|no (是否允许试密码登录)

1.是否允许服务端的任意一个存在的用户通过登陆系统的密码做sshd的认证(最初始的那种远程连接输入密码的方式)
2.是否可以使别人在登陆时没有钥匙时试密码登陆 ,yes表示可以试密码和no表示不可以试密码, 注释相当于还是no

先在服务端新建立一个lee用户

然后在/etc/ssh/sshd_config 这个文件里面设置存在的任意一个用户不能试密码登陆

重启服务

然后在客户端使用lee身份连接服务端,可以看到客户端不能试密码连接客户端

no改为yes,再次重启连接就可以

发现修改之后连接成功,注意:验证完之后改为最初始的yes

第四步:验证48行的 PermitRootLogin yes|no

1.是否允许服务端的root用户通过sshd的服务(客户端是否能通过服务端的root用户远程连接服务端)
2.禁止超级用户登陆 ,限制超级用户使用root身份来登陆ssh,默认为yes

 注意:之前我们已经设置过超级用户可以免密连接, 因此做这个实验之前应该先取消root的免密操作
 在客户端和服务端均删除钥匙也就是 rm -rf  /root/.ssh/*(此处我是在客户端远程删除了服务端的此项内容)
 不允许的话会一直显示密码错误

在服务端 vim /etc/ssh/sshd_config 这个文件,将在48行限制root用户的试密码登陆

看root用户是否能够试密码登陆,no理论上是不可以(可以试密码,但是输入正确的密码也会报错)


第五步:在/etc/ssh/sshd_config 这个文件里面的任意一行写入AllowUsers tom westos

1.设定用户的白名单,此名单里面的用户可以做sshd服务 (服务端不存在用户直接输入即可生成(这个观点错误), 多个用户用空格隔开)
2.如果写入服务端本身不存在的用户,那么当客户端连接服务端的时候需要密码就不知道是什么
3.因此必须先在客户端建立实验用户并且设置实验用户的密码,这样在客户端连接的时候才能看到实验效果
先在服务端里面建立两个用户xiaoli(密码设为xiaoli) 和xiaoming(密码设为xiaoming)

在服务端中打开/etc/ssh/sshd_config 这个文件,并且设置白名单

重启服务:

测试xiaoli用户和xiaoming用户是否可以试密码登陆

取消白名单

第六步:在/etc/ssh/sshd_config 这个文件里面的任意一行写入DenyUsers xiaoli xiaoming (可以同时写入多个用户,批量进行)

1.设定用户的黑名单,此名单里面的用户不可以做sshd服务 (多个用户用空格隔开,这个用户必须是服务端存在的,没有的话先建立再写入文件)

在服务端打开/etc/ssh/sshd_config 这个文件并且设置黑名单

重启服务,修改才会生效

验证黑名单中的用户不可以登陆(可以试密码登录,即使输入的密码是正确的,也会报错)

###如何添加sshd登陆信息###

(1)为什么要添加sshd登陆信息?

1.为了使客户端在连接服务端的时候可以直观的看到服务端的相关信息,因此要添加信息
2.也就是使客户端登陆服务端的时候显示服务端的一些信息

(2)怎样添加sshd登陆信息?

1.在服务端的 /etc/motd 文件里面设置服务端自己的一些信息
2.vim  /etc/motd 文件内容就是登陆后显示的信息
第一步:在服务端vim /etc/motd编辑该文件,添加信息(不需要重启服务,写了就会生效)

第二步:客户端连接服务端,显示登陆信息

可以看到,服务端的登陆信息被显示出来了。

###用户登陆审计###

(1)什么叫用户的登陆审计?

在服务端里面查看使用服务端的客户端的相关信息

(2)怎样进行登陆审计?

在服务端直接输入命令即可

(3)常用的登陆审计的命令:

  • w           ##查看正在使用当前系统的用户
  • last        ##查看使用过并且退出的用户信息
  • lastb      ##试图登陆但没成功的用户

(4)实验过程如下:

  1. ## w               查看正在使用当前系统的用户##
  2. ##w -f             查看使用的客户端来源,显示主机名等信息##
  3. ##w -i             显示连接我的主机的ip##

注意:/var/run/utmp  /var/log/wtmp  /var/log/btmp里面分别放的是用命令 w last lastb查出来的信息,只能用file +路径来查看,不可以用cat查看。

###想要把别的主机正在我们的主机上进行的进程踢掉怎么做###

第一步:用desktop主机远程连接server主机

第二步:在server主机上用w -i查看他的ip(显示当前正在控制你的主机的ip)


第三步:查看他的进程的id 使用 ps aux | grep pts/1(进程名字在tty下面)


第四步:kill -9 他的进程的id,这里显示的是4151,然后再查看是否结束了他的进程

可以看到瞬间客户端的远程服务关闭了,我们可以再查看一下 。


发现是真的已经断开了

从客户端来看,SSH提供两种级别的安全验证

第一种级别(基于口令的安全验证)安全性较低

 第二种级别(基于密匙的安全验证)安全性较高

    ssh和sshd的区别?

1.ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
2.两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。

1.ssh 是客户端
2.sshd 应该是服务器端的
 

猜你喜欢

转载自blog.csdn.net/daidadeguaiguai/article/details/102557243
今日推荐