机器准备
什么是SSH
SSH 或 Secure Shell 协议是一种远程管理协议,允许用户通过 Internet 访问、控制和修改其远程服务器。
SSH 服务是作为未加密 Telnet 的安全替代品而创建的,它使用加密技术来确保进出远程服务器的所有通信都以加密方式进行。
SSH是一种网络协议
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
SSH客户端
Xshell
[root@nfs-31 ~]#rpm -qf /usr/bin/ssh
openssh-clients-7.4p1-16.el7.x86_64
为什么需要SSH
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机
,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
Secure Shell是Linux系统首选的登录方式,以前使用FTP或telnet登录服务器,都是以明文的形式在网络中发送账号密码,很容易被黑客截取到数据,篡改后威胁服务器数据安全。
因此如何对数据加密,安全传输是重中之重,主要方式有两种:
- 对称加密(秘钥加密)
- 非对称加密(公钥加密)
连接服务器的方式
1. 去机房,拿上键盘、显示器直接连接
2. 使用telnet命令连接(明文数据,密码未加密)
3. 使用ssh安全可靠的远程登录(密码被加密)
不安全登录telnet(实践)
们以telnet命令,登录服务器为例,查看数据包
telnet是早期用来登录服务器、交换机的一个指令,但是登录账密是明文的不够安全,后来采用ssh登录linux了。
#1.部署telnet服务端,用于telnet登录该机器
[root@nfs-31 ~]#yum install telnet-server telnet -y#2.启动telnet服务
systemctl start telnet.socket
systemctl status telnet.socket#3.检查telnet服务,默认23端口
[root@nfs-31 ~]#netstat -tunlp|grep 23
tcp6 0 0 :::23 :::* LISTEN 1/systemd #4.注意关闭防火墙
systemctl stop firewalld
注:
修改linux认证
linux默认为了安全性,已经禁用了telnet登录,可以临时修改这个,可以测验telnet登录服务器。
[root@nfs-31 ~]#vim /etc/pam.d/remote
# 注释这一行
#auth required pam_securetty.so
或者使用普通用户,telnet即可登录了
useradd yuchao01
学习SSH的任务背景
这里讲解堡垒机、或是跳板机,并非和ssh知识点有直接关联、而是ssh应用的一个明显场景;
ssh的作用依然只是进行服务器的安全连接
1.安全登录服务器,进行账号密码验证;
2.设置密码以外认证方式,使用秘钥登录。堡垒机是利用该ssh特性,加大服务器安全而设计的一种服务器集群形式
为了最大程度的保护公司内网服务器的安全,公司内部有一台服务器做跳板机(JumpServer)。
运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
由于开发人员有时候需要通过跳板机登录到线上生产环境查看一些业务日志,所以现在需要运维人员针对不同的人员和需求对==账号密码进行统一==管理,并且遵循权限最小化原则。
部署ssh要求
- 跳板机上为开发人员创建用户,及公共目录,供开发人员使用,并做好权限控制
- 所有线上生产服务器搭建sshd服务。
- 对于ssh服务根据需求进行配置
- 禁止root用户远程登录
- 更改默认端口(22=>10086)
- 线上生产服务器创建devyu用户,并安装工具来生成随机密码
(实战1)SSH密码登录原理
1、加密算法(了解)
①对称加密算法(DES)
总结
1.发送方,使用密钥、对明文数据加密,然后再发出去
2.接收方,必须用同一个密钥、对密文解密,才能转为明文。
3.如果明文数据不加密直接发送,是非常危险的,很容易就被其他人捕获,比如于超给美女打招呼,立马被女朋友发现,当场腿打断。
4.对称加密强度很高,难以破解,问题是当机器数量较多的时候,大量的发送密钥,难以保证密钥安全性,一旦某一个Client被窃取密钥,其他机器的安全性也就崩塌了,因此,非对称加密应运而生
②非对称加密算法(RSA)
非对称加密分为:公钥(Public Key)与私钥(Private Key)
使用公钥加密后的密文,只能使用对应的私钥才能解开,破解的可能性很低。
2、对称、非对称加密算法区别是?
- 对称加密
- 使用同一个密钥进行加密和解密,密钥容易泄露
- 加密速度快,效率高
- 数据传输,速度快
- 安全性较低;
- 非对称加密
- 使用不同的密钥(公钥和私钥)进行加密和解密
- 加密速度远远慢于对称加密
- 数据传输速度慢
- 安全性较高
3、SSH认证方式
1.关于root ,账户密码连接的加密,解密流程
root@10.0.0.7
1231232.关于root,公私钥连接的加密,解密流程
3. 配置ssh的免密登录(生成公私钥)
4. 学习修改sshd的服务端配置文件修改(修改端口,禁止密码登录,只允许公钥登录)
问题来了,我该如何确认,找到这个原理图中所说的公私钥在哪呢?
要测试基于账户密码认证的登录形式,需要准备2个机器
客户端(windows,linux)
windows
打开cmd,xshell,只识别windows提供的dos命令
还提供了一个工具,叫做git-bash工具,利用这个工具,打开的终端,能识别部分的linux命令,去操作你的windows
# 输入如下命令,首次连接某个linux机器
#1.首次连接,需要用户自己确认机器的指纹信息,输入yes确认后
服务端会发送公钥给客户端,记录到客户端的 ~/.ssh/knows_hosts
ssh root@10.0.0.61
2.查看客户端记录的 cat ~/.ssh/known_hosts ,记录了服务端的公钥信息
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop$ cat ~/.ssh/known_hosts# ip 非对称加密 10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=
这个字符串,就是你要连接的linux机器的公钥信息
服务端(linux)
10.0.0.61此时去你的服务端, 配置文件下寻找 ecdsa该算法的公钥文件
[root@m-61 ~]#ls /etc/ssh/
moduli sshd_config ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub
ssh_config ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key过滤该算法提供的公私钥文件
[root@m-61 ~]#ls /etc/ssh/ |grep ecdsa
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub查看公钥
[root@m-61 ~]#cat /etc/ssh/ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y= 查看私钥
[root@m-61 ~]#cat /etc/ssh/ssh_host_ecdsa_key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIFRG97Nad3sFsLBv5rL/76jHuc1SUsUikqttZdn2j1FroAoGCCqGSM49
AwEHoUQDQgAEv9LHdsBo1wqqjukLgVNiTeDJnqF3UP8MpRZV853iBlv/xfCUDFZq
5x4d78ECxblnykSYboCNLIczxyQ6z3hztg==
-----END EC PRIVATE KEY-----
[root@m-61 ~]#
4.如何确认目标机器的正确性(了解)
首次连接,服务端是让你输入yes,确认该机器的指纹是否正确
指纹信息,是通过公钥,基于sha256加密而来
1.看指纹是什么
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh root@10.0.0.61
The authenticity of host '10.0.0.61 (10.0.0.61)' can't be established.
ECDSA key fingerprint is
SHA256:Csqwr63+SZRFFOug/IGoFTgRe8hDSI/QalSMBcC6IaU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
2.根据你获取到的公钥信息,通过sha256计算下,得到指纹,在对比这俩指纹是否一致,就明确该机器是你想连接的机器了。。。
你可以在服务端敲
ssh-keygen -E SHA256 -lf /etc/ssh/ssh_host_ecdsa_key.pub如何再客户端验证该指纹
在客户端,获取到该机器的公钥
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh-keyscan 10.0.0.61 |grep ecdsa
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=vim 61.pub
对公钥加密256加密,得到指纹
ssh-keygen -E SHA256 -lf 61.pub
在客户端,去验证,你连接的机器,是否是你想连接的
ssh root@10.0.0.61
基于公钥确认,先得知该机器的公钥信息
两个办法,获取到机器公钥信息1.在客户端扫描该机器的公钥
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh-keyscan 10.0.0.61 |grep ecdsa
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=2.在服务端
[root@m-61 ~]#cat /etc/ssh/ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=
我们在进行指纹认证的时候,是直接输入yes,并未做确认
证明,你yes确认的机器,的确是目标的机器
你yes确认的那个指纹,是通过公钥文件,加密而来,用同样的算法,对该文件加密,就可以看到一样的指纹了
1.首次连接,指纹确认
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh root@10.0.0.61
The authenticity of host '10.0.0.61 (10.0.0.61)' can't be established.
ECDSA key fingerprint is SHA256:Csqwr63+SZRFFOug/IGoFTgRe8hDSI/QalSMBcC6IaU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?ECDSA key fingerprint is SHA256:Csqwr63+SZRFFOug/IGoFTgRe8hDSI/QalSMBcC6IaU.
2.服务端发给客户端自己的公钥,客户端记录到本地~/.ssh/known_hosts(通用语windows,linux),表示已知的服务器公钥信息
cat ~/.ssh/known_hosts
此时客户端,还未确认该指纹,就不会吧服务端的公钥,写入到该文件中
你现在可以去比对,指纹是否一致
ssh-keygen扫描公钥
ssh-keyscan命令,可以获取目标机器的公钥信息,扫描目标机器的公钥在客户端操作
ssh-keyscan 10.0.0.61yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh-keyscan 10.0.0.61
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/a19vEmUMzhzEM8Hbqy2Cd2KL838ojWDO/TDiMOpaKZ6okJ7kBsy8eK0ukYqMj/xBgco8rlc8nz171rul3HN1uUgu7+c8TNbAyggyiWNmaZzYMbWYwC5ZhhlPA8RU+39Znw4BpwKqEC76h2dAj/OOwEADIJK4GuwEnsTmCy2CSh4hqL7M1MWlsV7Kkc0ZBA4tYmz/qAYakl8PFF+CY7YWMJFWDvqLxGdEcqBkvIJ1hEuB21UDhXCOimYgp94frzcyeFoGv4WKcKw7Dq3lPh9gT038v6bw/EA5PC4ubjmly3XJUKZoRVcg773Oa/TcBOeZfTW2zPK83X0hQNk9T1KJ
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC9lqWZdqpEGg6hV4PbSf/n0NI33oaedK/KFP5YWxF6A
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
提取服务端远程连接的公钥
# 10.0.0.61:22 SSH-2.0-OpenSSH_7.4
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=
通过命令,对该公钥进行加密,得到指纹
ssh-keygen -E SHA256 -lf /etc/ssh/ssh_host_ecdsa_key.pub
3.你可以去服务端查看公钥信息/etc/ssh/ssh_host_ecdsa_key.pub
和你客户端的known_hosts做对比,是否一致
6、ssh密码认证小结
-
SSH是Linux下远程管理的工具,相比Telnet安全,运维人员必备的神器!
-
SSH的全称Secure Shell,安全的shell,是Client/Server架构,默认端口号为22,TCP协议
-
必须搞懂SSH通信加密的原理、过程
1.需要你总结
- ssh密码认证的原理,与配置文件,涉及的linux命令
- ssh指纹确认与公钥的原理,与配置文件,涉及的linux命令
- ssh密码认证涉及的所有配置文化(服务端,客户端)
(实战2-服务器安全)sshd服务部署
软件安装
修改配置文件
启动
使用
1、搭建所有服务的套路
-
关闭防火墙和selinux(实验环境都先关闭掉)
-
配置yum源(公网源或者本地源)
-
软件安装和检查
-
了解并修改配置文件
-
启动服务检查运行状态并设置开机自启动
2、搭建SSH服务
这部分内容可以参考于超老师前面讲解的系统初始化篇操作即可
(一)关闭防火墙和selinux
(二)配置yum源
(三)软件安装
①确认是否安装openssh
由于每一台机器都是默认安装了sshd服务的,这里你可以采用期中综合架构里的任何一台机器测试。
[root@m-61 ~]#rpm -qa openssh
openssh-7.4p1-16.el7.x86_64openssl 命令,给你用,去基于不同的算法,创建证书的命令安装openssh服务,提供远程sshd服务
[root@m-61 ~]#rpm -qa openssh-server
openssh-server-7.4p1-16.el7.x86_64# 默认yum有2个功能,1是安装,2是升级yum install openssh-server openssh -y
(四)ssh基本安全配置
提升服务器ssh安全,就是来修改该配置文件了,先来看简单的配置;
1.禁用root用户登录、降低权限(只能通过普通用户登录,提前创建好可登录的普通普通户)
[root@m-61 ~]# useradd bob01
[root@m-61 ~]# cat random-pw.txt
gBPKYvF1
[root@m-61 ~]#
[root@m-61 ~]#
[root@m-61 ~]#cat random-pw.txt | passwd --stdin bob01
Changing password for user bob01.
passwd: all authentication tokens updated successfully.
[root@m-61 ~]#
[root@m-61 ~]#修改
#PermitRootLogin yes
PermitRootLogin no2.修改端口,22999
Port 229993.查看这俩配置参数
grep -Ei '^permitRootLogin|^port' /etc/ssh/sshd_config
grep -Ei '^(permitRootLogin|port)' /etc/ssh/sshd_config
4.1 pwgen随机密码生成工具
yum install pwgen -y
(五)服务管理
[root@m-61 ~]#netstat -tunlp |grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4516/sshd
tcp6 0 0 :::22 :::* LISTEN 4516/sshd 重启
systemctl restart sshd[root@m-61 ~]#
[root@m-61 ~]#netstat -tunlp |grep sshd
tcp 0 0 0.0.0.0:22999 0.0.0.0:* LISTEN 4654/sshd
tcp6 0 0 :::22999 :::* LISTEN 4654/sshd
加上端口
默认不让root登录了
[C:\~]$ ssh root@10.0.0.61 22999用bob01登陆下
(六)恢复默认配置
sed改回去
permitRootLogin
port
先看看参数
sed多次处理看到该参数
sed -e '/^permitRootLogin/Ip' -e '/^port/Ip' /etc/ssh/sshd_config -n
Port 22
PermitRootLogin yes整行内容替换,写入文件内容
sed -i.ori -e '/^permitRootLogin/Ic PermitRootLogin yes' -e '/^port/Ic Port 22' /etc/ssh/sshd_config替换方案
sed -i.bak -e 's#PermitRootLogin no#PermitRootLogin yes#' -e 's#Port 22999#Port 22#' /etc/ssh/sshd_config
免密登录(重点)
公钥:一串字符串,在非对称加密里面用来加密数据,随意公开。
私钥:一串字符串,在非对称加密里面用来解密数据,不能泄露。
你原本是用root的密码进行身份验证,登录该服务器
客户端更换为公钥形式登录
普通密钥:一串字符串。在对称加密里面,加密和解密都用它。
总体思路图:
windows免密登录
基于公私钥的认证(免密码登录)
windows免密登录linux
公钥文件会记录主机名
1. 生成公私钥,客户端的
客户端的~/.ssh 这个目录,就存放了客户端机器的公私钥文件yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/yu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/yu/.ssh/id_rsa
Your public key has been saved in /c/Users/yu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Bsp4uy8IchkJAUuxA4dspOxcckzdTyBR2qWAZ3BmT/g yu@DESKTOP-1TDLFH9
The key's randomart image is:
+---[RSA 3072]----+
|B*oo+B=+.. |
|B=+.+=B.o. |
|+* =o.o+o |
|o Bo . E . |
| o.o+ S |
|o o. . . |
|.o .. |
| . .. |
| .o. |
+----[SHA256]-----+yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ls ~/.ssh
id_rsa id_rsa.pub2.发给服务端
客户端的公私钥对以及有了,把客户端的公钥,发给服务端(~/.ssh/)
[root@m-61 ~]#ls ~/.ssh
known_hosts通过命令,吧客户端的公钥,写入到服务端的authorized_keys文件中$ ssh-copy-id root@10.0.0.613.检查服务端的 信任主机公钥文件
这里存放了 客户端的公钥字符串
[root@m-61 ~]#cat ~/.ssh/authorized_keys 4.此时已经可以免密登录了,只能通过git-bash这个工具去免密登录,因为记录该主机名ssh root@10.0.0.61
linux免密登录linux
master-61 免密登录 web-71.在61机器生成公私钥对儿
ls ~/.ssh/
[root@m-61 ~]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hkQRbkCBSXpR1QCXvgIEYfDOmk0Yka6UsYsH1B6MjLc root@m-61
The key's randomart image is:
+---[RSA 2048]----+
|O**=*+B* |
|+O== =. . |
|=oB...+ |
|.@E. o.. |
|=.=. ..S |
|o*. . .. |
|o.. . |
| |
| |
+----[SHA256]-----+2.检查公私钥[root@m-61 ~]#ll ~/.ssh/
total 16
-rw------- 1 root root 572 Apr 27 15:19 authorized_keys
-rw------- 1 root root 1679 Apr 27 15:26 id_rsa
-rw-r--r-- 1 root root 391 Apr 27 15:26 id_rsa.pub
-rw-r--r-- 1 root root 341 Apr 27 14:45 known_hosts3.发送master-61的公钥,给web-7
为了免密登录
ssh-copy-id root@10.0.0.7提问,web-7是如何允许master-61登录自己的?
root /etc/passwd
123123 /etc/shadow换了形式验证master-61是否被允许登录
前提一定你通过某办法,吧master-61的公钥,写入到web-7机器的~/.ssh/authorized_keys web-7 会去自己的 ~/.ssh/authorized_keys 是否有master-61的公钥 比对,web-7上记录的公钥,以及比对master-61本地的公钥
[root@web-7 ~]#cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhShiDhxEZbVaGzIo7rw3KM0tr6nU8eawVHWjwgpkk8RQ56QVaHt5030lDQ7qA9W+C4btDc1A34WLkfCsz2J8+QEKAvZYBSxzK++8H+bBDpcBPWRE0mMwtCAdBv/0uSrg5QLVHMwro8ezrctFpbV6A+BN383AxaOkz3ccG/578dB7DK1n/WrHIR7LwJSp3lv2PpeTM72vKAgvS1RM9O36cA7kCSz4KxbbpUfAGlQk45iJiod1lXk2a+b3xxdMRee5nVRAkmZmP+HLHqUzqQIwcrahRRcDiTBEIt1SPDT6/y02zKJYG7ZWotozpeDEVvC/Bg5N0mMTMKztCQeNBn5Pp root@m-61master-61机器检查本地生成的公钥
[root@m-61 ~]#cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhShiDhxEZbVaGzIo7rw3KM0tr6nU8eawVHWjwgpkk8RQ56QVaHt5030lDQ7qA9W+C4btDc1A34WLkfCsz2J8+QEKAvZYBSxzK++8H+bBDpcBPWRE0mMwtCAdBv/0uSrg5QLVHMwro8ezrctFpbV6A+BN383AxaOkz3ccG/578dB7DK1n/WrHIR7LwJSp3lv2PpeTM72vKAgvS1RM9O36cA7kCSz4KxbbpUfAGlQk45iJiod1lXk2a+b3xxdMRee5nVRAkmZmP+HLHqUzqQIwcrahRRcDiTBEIt1SPDT6/y02zKJYG7ZWotozpeDEVvC/Bg5N0mMTMKztCQeNBn5Pp root@m-61此时可以免密登录了
ssh root@10.0.0.7
配置文件总结
ssh-copy-id root@10.0.0.7 主要免密登录
cat ~/.ssh/known_hosts 记录了服务端的公钥信息
免密登录
检查web-7上的authorized_keys
检验master-61的公私钥文件
SSH远程执行命令
查看主机名
[root@m-61 ~]#ssh root@10.0.0.8 hostname
root@10.0.0.8's password:
web-8
查看内存
[root@m-61 ~]#ssh root@10.0.0.7 free -mtotal used free shared buff/cache available
Mem: 1982 108 1410 25 463 1666
Swap: 0 0 0
远程创建文件[root@m-61 ~]#ssh root@10.0.0.7 touch /tmp/6666.png
远程安装软件redis
web7 redis
ssh root@10.0.0.7 yum install redis -y
远程删除redis
ssh root@10.0.0.7 yum remove redis -y
远程查看服务状态
远程查看web-7的nginx运行状态
ssh root@10.0.0.7 systemctl status nginx
ssh安全防御
1.ssh支持密码连接、秘钥连接两个方式,为了密码别泄露,你得关闭密码登录
2.默认端口号全世界都知道是22,你得改掉
3.如果客户端私钥被窃取,root服务器也就危险了
ssh优化
禁止密码登录,只允许公钥登录
[root@web-7 ~]#grep -Ei '^(pub|password)' /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
修改默认22端口
[root@web-7 ~]#grep -Ei '^(pub|password|port)' /etc/ssh/sshd_config
Port 22999
PubkeyAuthentication yes
PasswordAuthentication no
重启服务
[root@web-7 ~]#systemctl restart sshd
用master-61机器去登录他
[root@m-61 ~]#ssh root@10.0.0.7 -p 22999
Last login: Wed Apr 27 16:35:42 2022 from 10.0.0.1
[root@web-7 ~]#
用web-8机器也尝试登录web-7
发现是可以登录的
限制主机登录条件、设定iptables规则,只允许跳板机的流量(172.16.1.61)登录,其他机器的流量全部禁止。(只限定ssh的服务,限制22999的流量)
在想添加该规则的机器上执行
针对web-7限定只允许 master-61访问
[root@web-7 ~]#iptables -A INPUT ! -s 172.16.1.61 -p tcp --dport 22999 -j DROP
[root@web-7 ~]#
[root@web-7 ~]#
[root@web-7 ~]#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- !172.16.1.61 anywhere tcp dpt:22999Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination