一、sshd服务

1.简介:

sshd = secure shell,是可以通过网络在主机中开启shell的服务

2.连接方式:

 ssh	username@ip	##文本模式的链接
 ssh	-X	username@ip	##可以在连接成功后开机图形

注意:
第一次连接陌生主机需要建立认证文件(/root/.ssh/know_hosts
所以会询问是否建立,需要输入yes

3.虚拟机网络的配置以及服务控制参见:

虚拟机网络的配置以及服务控制

二、sshd 的key认证

1.生成认证KEY

使用以下命令可以生成密钥

 ssh-keygen		##生成密钥
  • 指定保存加密字符的文件(使用默认)
  • 设定密码(使用空密码)
  • 也可以使用一句命令: ssh-keygen -f /root/.ssh/id_rsa -P ""

示例:
在这里插入图片描述
可以查看/root/.ssh/来确认密码:
在这里插入图片描述
图中:
id_rsa为私钥(钥匙)
id_rsa.pub为公钥(锁)

2.公钥加密主机

使用命令:

 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.216	##输入密码确认,使用公钥加密216主机

示例:
在这里插入图片描述
查看是否加密成功:

ls /root/.ssh/ 查看是否有 authorized_keys 文件,如果有表示加密成功
在这里插入图片描述
由图可得,216主机已加密成功

3.更改配置文件:

 vim /etc/ssh/sshd_config        ##将78行的yes改成no 表示关闭密码登陆

在这里插入图片描述
4.分发钥匙

为主机116分发钥匙:

 scp /root/.ssh/id_rsa root@172.25.254.116:/root/.ssh/

在这里插入图片描述
5.测试

客户端主机中(172.25.254.116):

 ssh root@172.25.254.216		##连接时发现直接登陆不需要root登陆系统的密码认证

在这里插入图片描述
发现直接登陆不需要root登陆系统的密码认证

三、sshd的安全设定

sshd的安全设定保存在/etc/ssh/sshd_config文件中

(1)更改端口以指定端口号登陆

1.关闭selinux防火墙

setenforce是Linux的selinux防火墙配置命令, 执行setenforce 0 表示关闭selinux防火墙
在这里插入图片描述
执行getenforce返回Permissive表示selinux防火墙已关闭

2.关闭系统防火墙

使用以下命令关闭系统防火墙

 systemctl stop firewalld

在这里插入图片描述
3.查看现在端口

 netstat -antlupe | grep sshd

在这里插入图片描述
可以看出现在的端口是22

4.更改配置文件

更改/etc/ssh/sshd_config文件中端口信息

 vim /etc/ssh/sshd_config

将文件中17行的端口信息改变:
在这里插入图片描述
改为:
在这里插入图片描述
5.重启sshd服务

重启sshd服务以使更改的配置文件生效:

 systemctl restart sshd.service

重启后查看端口,发现端口变为9999
在这里插入图片描述
6.测试

使用另一台主机登陆该主机:
在这里插入图片描述
使用默认端口22无法登陆主机216,使用参数-p指定端口9999登陆:

 ssh root@172.25.254.216 -p 9999		##指定端口号登陆

在这里插入图片描述
发现可以登陆

(2) 更改允许登陆的ip

1.更改配置文件

更改/etc/ssh/sshd_config文件中19行中的ListenAddress字段,默认为:

在这里插入图片描述
0.0.0.0表示开启所有ip的接口
修改为:
在这里插入图片描述
表示只开启ip为172.25.254.216的接口

注意:每次更改配置文件后都需要重启服务以使更改生效

2.测试
查看216主机的网络情况发现可以使用172.25.254.216127.0.0.1两个ip登陆该主机:
在这里插入图片描述
更改配置文件和重启服务后使用ip为127.0.0.1的接口登陆216主机:
在这里插入图片描述
显示Connection refused
使用ip为172.25.254.216的接口登陆216主机:
在这里插入图片描述
成功登陆

(3)设置是否允许使用ssh命令登陆root用户

1.修改配置文件
更改/etc/ssh/sshd_config文件中48行中的PermitRootLogin字段,默认为yes表示允许:
在这里插入图片描述
修改为no:
在这里插入图片描述
保存后重启服务

2.测试

修改配置文件后尝试登陆root用户,即使密码输入正确也无法登陆:
在这里插入图片描述
尝试登陆其他用户即可成功:
在这里插入图片描述

(4)设置用户白名单

设置白名单,表示允许ssh命令登陆指定用户

1.修改配置文件
更改/etc/ssh/sshd_config文件中写入AllowUsers字段:

AllowUsers leo		##设置白名单,表示只允许ssh命令登陆leo用户

在这里插入图片描述
保存后重启服务

2.测试
使用ssh命令登陆leo用户发现可以登陆:
在这里插入图片描述
登陆其他用户发现不能登陆:
在这里插入图片描述

(5)设置用户黑名单

1.修改配置文件
更改/etc/ssh/sshd_config文件中写入DenyUsers字段:

 DenyUsers leo		##设置用户黑名单,表示不允许使用ssh命令登陆leo用户

在这里插入图片描述
保存后重启服务

2.测试
使用ssh命令登陆leo用户发现无法登陆:
在这里插入图片描述
登陆其他用户可成功登陆:
在这里插入图片描述

四、scp与rsync

(一)scp命令

scp命令可以实现远程主机之间的文件复制

1.命令格式:

 scp [参数] [原路径] [目标路径]

2.常用参数:

  • -r :复制目录时使用
  • -P:大写的P指定端口

前面的内容中发送私钥以及复制文件都用到了该命令

示例:
上传文件:
在这里插入图片描述
上传目录:
在这里插入图片描述
下载目录:
在这里插入图片描述

(二)rsync远程同步命令

1.rsync命令

rsyncremote sync 的缩写,用于linux系统下的数据镜像备份工具,远程服务器之间的文件拷贝,用法与作用与scp命令基本一致,但是速度比scp快,默认忽略一些东西

2.rsync命令格式

 rsync [OPTION] SRC DEST
 rsync [OPTION] SRC [USER@]HOST:DEST
 rsync [OPTION] [USER@]HOST:SRC DEST
 rsync [OPTION] [USER@]HOST:SRC DEST
 rsync [OPTION] SRC [USER@]HOST:DEST

其中:
SRC:源文件或目录
DEST:目标文件或目录
USER@:目标用户,不加默认为root。
HOST:远程主机IP

3.rsync命令参数

参数 含义
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a–no-l 等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软链接
-L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
- -delete 删除那些目标目录中原目录没有的文件
- -exclude = PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
- -progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
-u 加上这个选项后将会把目标目录中比原目录还新的文件排除掉,不会覆盖

(三)scp与rsync的区别

  • scp是相当于复制,黏贴,如果有的话是覆盖,比较耗时间,不智能。
  • rsync是复制,如果有重复的文件,会直接跳过,而且他自己的算法优化
  • scp是把文件全部复制过去,当文件修改后还是把所有文件复制过去,rsync
    第一次是把所有文件同步过去,当文件修改后,只把修改的文件同步过去
Logo

一站式 AI 云服务平台

更多推荐