- 一、实验环境配置
- 二、基本知识
- 1、主流企业架构
- 2、Openssh的功能
- 3、ssh远程连接出问题的解决方案
- 1、基本知识
- 2、解决问题
- 三、ssh常用参数
- 四、sshd key认证
- 1、认证类型
- (1)对称加密
- (2)非对称加密
- 2、生成非对称加密密钥
- 3、对服务器加密
- 1、生成密钥
- 2、测试
- 五、sshd 安全优化参数详解
- (1)、Port 2222 #设定端口为2222
- (2)、PasswordAuthentication yes|no #是否开启原始密码认证方式
- (3)、PermitRootLogin yes|no #对超级用户登陆是否禁止
- (4)、用户的黑白名单
实验环境配置
保证干净的实验环境,重新配置nodea与nodeb的ip。并删除不必要的文件。(因为之前老师设置过的系统可能有其他文件)
有cs模式和bs模式。
C/S模式就是指客户端/服务器模式,是计算机软件协同工作的一种模式。比如微信。
由于Web浏览器的兴起,B/S模式逐步取代了C/S模式,被更广泛地应用。比如百度。
比如ssh 就是客户端 sshd就是服务端。
2、Openssh的功能(1)、sshd服务的用途
##作用:
#可以实现通过网络在远程主机中开启安全shell的操作
Secure SHell ===>ssh ##客户端
Secure SHell daemon ===>sshd ##服务端
(2)、安装包
openssh-server
sshd用来控制所有ssh的程序,是服务端,它的安装包就是openssh-server
由于openssh-server是我们系统当中的一个基础的安装包,在安装系统的时候已经安装好了。
所以,如果想让别人远程连接我的主机的话,那我的主机里就必须有openssh-server这个安装包,可以通过如下命令进行查询。
这个服务所使用的守护进程叫sshd:
(3)、主配置文件
/etc/ssh/sshd_conf
在主配置文件中,设定 sshd这个守护京岑进程如何对ssh进行控制。
(4)、默认端口
22
访问同样的ip 看到的东西不一样 比如 使用ssh远程连接50 这台主机 和 在100这台主机中使用浏览器 输入172.25.254.50 看到的东西就不一样。
我们可以把端口理解为 程序对外开
放的接口。
ip上有某一个接口,说明该程序在运行,没有就说明该程序没在运行。
当然端口是可以改变的,但是一般情况下使用默认的就好。
我们可以使用如下方式查看端口号:
如果对后面的参数有不清楚的,可以使用man netstat查看。
(5)、客户端命令
ssh
当使用200连接100的时候,会发现100这台主机发送过来的fingerprint,(密钥)
意思就是当再次连接100的时候证明与之前连接过的是相同的ip(200)。
当接收密钥后,/root/.ssh/known.hosts 中就会自动记录100主机发送过来的密钥。
而对应于200这台主机中的 /root/.ssh/known.hosts 里面的内容。
100这台主机 的key存在于 /etc/ssh
当200这台主机连接100的时候,100主机会形成公钥和私钥,公钥发给100 ,私钥用来和公钥匹配。
当200去连接100的时候,100首先要做的是就是 用私钥去匹配公钥 ,如果匹配成功,则证明200是受信任的。
下图可以看到,100中的公钥和200接收到的一样。
如果此时,我们将100主机上的/etc/ssh/ssh_host_* 删掉
当再次重启sshd服务的时候,ssh_host_文件又会重新生成,这样和之前发给200的公钥就不一样了,那就会使连接出现问题。
当用200去连接100时,会出现如下情形:
打开 /root/.ssh/known_hosts 按照提示 删掉第一行即可。
之后重新连接即可。
| -l | 指定登陆用户 |
|---|---|
| -i | 指定私钥 |
| -X | 开启图形 |
| -f | 后台运行 |
| -o | 指定连接参数 如: ssh -l root@172.25.254.x -o “StrictHostKeyChecking=no” 首次连接不许要输入yes |
| -t | 指定连接跳板 如:ssh -l root 172.25.254.1 -t ssh -l root 172.25.254.105 |
(1)、-X 开启图形
当连接100这台主机后,开启不了图形
当然也可以在连接时就直接指定开启gedit。
(2)、-f 后台运行
为了不影响前台运行,我们使用-f 后台运行gedit
(3)、 -o |指定连接参数
ssh -l root@172.25.254.x -o “StrictHostKeyChecking=no” 首次连接不许要输入yes
(4)、-t | 指定连接跳板
如:ssh -l root 172.25.254.1 -t ssh -l root 172.25.254.105
指定跳板是因为 ,你的主机是不受信的,必须通过中继主机去连接目标。
假设 100这台主机只让200连接,这个时候就要指定一个跳板
跳板就是 通过谁去链接谁 :
此时 ,100中 w -i显示 是200在连接他。(50是之前连接的)
上图反映了,ssh开启的远程连接服务会方便用户使用,但是权限越大 安全指数就越低,
比如 我关掉ssh服务,那知道主机密码的人还可以通过密码来登录真实主机。
也就是说 用shh这样的登陆方式 去登陆你想维护的服务器的时候 使用这种方式不安全
那如何解决这样的问题?
加密和解密是同一串字符
容易泄漏
可暴力破解
容易遗忘
加密用公钥,解密用私钥
不会被盗用
攻击者无法通过无密钥方式登陆服务器
显然 这一小节开始图示的内容就是对称加密。
我们可以把传统的挂锁 (铁疙瘩和钥匙)想象成非对称加密 如果没有钥匙 连开锁的机会都没有。
(1)、方法1:
(2)、方法二:
内容与方法一一致,但是使用非交互式的方法:
做完2的步骤以后,相当于在商店买了一把锁和对应的钥匙,但是还没有上锁。
使用如下图示中的步骤,
用指定锁对指定用户及主机上锁。
当/root/.ssh 目录下出现 authorized_keys 说明上锁成功。说明这个用户是被加密过的。
2、测试其实authorized_keys就是id_rsa文件的复制,
上锁的过程就是 将id_rsa 文件复制到.ssh文件中 生成authorized_keys的过程。
首先 将生成的密钥发送给200主机(给指定用户分配密钥)
这时候 在200这台主机上登录100 在登陆时 指定密钥所在位置
当然,如果觉得每次都要制定密钥来免密登录100 那可以把id_rsa 放入200下的/root/.ssh目录下。
这样就会自动识别这个文件了。
使用ssh远程连接服务时,默认端口就是22
当我们关闭200的sshd服务时,使用100连接200,会有如下显示。
改变端口号:
编写如下文件,将port注释打开,改为2222。
然后再连接该改过端口的坠主机上时,要注意加上-p,标明端口号。
做完实验后 ,我们还是将/etc/ssh/sshd_config 文件中的端口号 注释掉 我们使用默认端口就好。
当然,我们在这章学习过对称加密与非对称加密后,延伸出这样一个问题:
能不能只存在非对称加密,直接取消掉输入密码的功能,这样就能保证所有人链接我的主机时采用非对称加密方式,那只有我可以将我主机的密钥发送给我信任的人,这样安全性就会大大提高。
当其他主机再次连接时,就会出现如下所示的情况。
当然,此时只有拿到密钥的主机才可以连接100。
我们可以使用scp命令将密钥发送给指定用户。
此时200在拿到密钥的情况下就能登录100了。
当有主机远程连接我的主机的时候,考虑到root用户的权限太大了,可以禁止其以超级用户的身份连接。
将100主机的/etc/ssh/sshd_config 第46行修改如下:
当使用200去连接100的时候就会发现 你连接100的普通用户可以 但是链接超级用户不行。
(1)、用户黑名单(DenyUsers)
在/etc/ssh/sshd_config 下设定 DenyUsers
那如果在黑名单中添加多个用户 可以查询 man 5 sshd_config,里面指出 不同用户之间用空格隔开。
此时用200连接 westos与zhang 就都不能连接100了。
(2)、用户白名单(AllowUsers)
做实验前 先把刚刚设置的黑名单注释掉。
在100主机中 添加白名单用户 zhang
就代表只有白名单内的用户可以通过ssh 连接本主机。(连root也不行)



