当前位置: 首页 > news >正文

day38-SSH安全登录

机器准备 

什么是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要求

  1. 跳板机上为开发人员创建用户,及公共目录,供开发人员使用,并做好权限控制
  2. 所有线上生产服务器搭建sshd服务。
  3. 对于ssh服务根据需求进行配置
    • 禁止root用户远程登录
    • 更改默认端口(22=>10086)
  4. 线上生产服务器创建devyu用户,并安装工具来生成随机密码

 (实战1)SSH密码登录原理

1、加密算法(了解)

①对称加密算法(DES)

总结

1.发送方,使用密钥、对明文数据加密,然后再发出去

2.接收方,必须用同一个密钥、对密文解密,才能转为明文。

3.如果明文数据不加密直接发送,是非常危险的,很容易就被其他人捕获,比如于超给美女打招呼,立马被女朋友发现,当场腿打断。

4.对称加密强度很高,难以破解,问题是当机器数量较多的时候,大量的发送密钥,难以保证密钥安全性,一旦某一个Client被窃取密钥,其他机器的安全性也就崩塌了,因此,非对称加密应运而生

 ②非对称加密算法(RSA)

非对称加密分为:公钥(Public Key)与私钥(Private Key)

使用公钥加密后的密文,只能使用对应的私钥才能解开,破解的可能性很低。

2、对称、非对称加密算法区别是?

  • 对称加密
    1. 使用同一个密钥进行加密和解密,密钥容易泄露
    2. 加密速度快,效率高
    3. 数据传输,速度快
    4. 安全性较低;
  • 非对称加密
    1. 使用不同的密钥(公钥和私钥)进行加密和解密
    2. 加密速度远远慢于对称加密
    3. 数据传输速度慢
    4. 安全性较高

3、SSH认证方式

1.关于root ,账户密码连接的加密,解密流程

root@10.0.0.7
123123

2.关于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.61

yu@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       

相关文章:

day38-SSH安全登录

机器准备 什么是SSH SSH 或 Secure Shell 协议是一种远程管理协议,允许用户通过 Internet 访问、控制和修改其远程服务器。 SSH 服务是作为未加密 Telnet 的安全替代品而创建的,它使用加密技术来确保进出远程服务器的所有通信都以加密方式进行。 SS…...

U盘出现USBC乱码文件的全面解析与恢复指南

一、乱码现象初探:USBC乱码文件的神秘面纱 在数字时代,U盘已成为我们日常生活中不可或缺的数据存储工具。然而,当U盘中的文件突然变成乱码,且文件名前缀显示为“USBC”时,这无疑给用户带来了极大的困扰。这些乱码文件…...

mac iterm2 使用 lrzsz

前言 mac os 终端不支持使用 rz sz 上传下载文件,本文提供解决方法。 mac 上安装 brew install lrzsz两个脚本 注意:/usr/local/bin/iterm2-send-zmodem.sh 中的 sz命令路径要和你mac 上 sz 命令路径一致。 /usr/local/bin/iterm2-recv-zmodem.sh 中…...

京东大数据治理探索与实践 | 京东零售技术实践

01背景和方案 在当今的数据驱动时代,数据作为关键生产要素之一,其在商业活动中的战略价值愈加凸显,京东也不例外。 作为国内领先的电商平台,京东在数据基础设施上的投入极为巨大,涵盖数万台服务器、数 EB 级存储、数百…...

应该连续学一个科目,还是多学科切换?

https://www.zhihu.com/question/333420829https://www.zhihu.com/question/333420829...

游戏何如防抓包

游戏抓包是指在游戏中,通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包,市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式,一类…...

asp.net core发布配置端口号,支持linux

方式一,修改配置文件 appsettings.json 找到文件 appsettings.json, 添加如下节点配置,在linux环境需要设置0.0.0.0才可以正常代表本机,然后被其他机器访问,此处设置端口8000, "Kestrel": {&quo…...

基于linux下实现的ping程序(C语言)

linux下实现的ping程序 一、设计目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设…...

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾:高度(也称深度) 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…...

线段覆盖(c++)

题目描述 在一条数轴上,有 N 条线段,第 i 条线段的左端点是 si​,右端点是 ei​。如果线段有重叠(即使是端点重叠也算是重叠),则输出 “impossible”, 如果没有重叠则输出 “possible” 。 输入格式 多组…...

SSM 仓库管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

基于Python3编写的Golang程序多平台交叉编译自动化脚本

import argparse import os import shutil import sys from shutil import copy2from loguru import loggerclass GoBuild:"""一个用于构建跨平台执行文件的类。初始化函数,设置构建的主文件、生成的执行文件名称以及目标平台。:param f: 需要构建的…...

SqlSugar查询达梦数据库遇到的异常情况(续)

之前的文章提到在SqlSugar的Where函数中使用!string.IsNullOrEmpty函数查询达梦数据库时,明明数据库中有数据但就是查不出来,但相同的代码在另一台电脑上就可以正常返回数据。   以下图中的两张表数据为例,执行下面的SQL语句无法查询到数据…...

企业电子投票系统 【源码+文档】

目 录 第1部分 概 述 第2部分 分析部分 2.1.功能需求 第3部分 系统设计 3.1.功能模块设计 3.2.数据库的设计 第4部分 系统开发 4.1.数据库 4.1&a…...

如何正确地安装和设置魔方财务软件?

安装和设置魔方财务软件需要按照以下步骤进行操作: 下载安装程序:首先,到魔方财务软件的官方网站或认可的软件下载网站下载安装程序。确保选择与您的操作系统兼容的版本。 运行安装程序:双击安装程序,按照提示进行安装…...

在Ubuntu 22.04 LTS中使用PyTorch深度学习框架并调用多GPU时遇到indexSelectLargeIndex相关的断言失败【笔记】

在Ubuntu 22.04 LTS系统中,已安装配置好CUDA 12.4、cuDNN 9.1.1以及PyTorch环境 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 在PyTorch深度学习框架训练调用多GPU时,提示 indexSelectLargeIndex: block: [x, 0, 0], thread: [x, 0, 0] Assertion src…...

[网络安全]XSS之Cookie外带攻击姿势详析

概念 XSS 的 Cookie 外带攻击就是一种针对 Web 应用程序中的 XSS(跨站脚本攻击)漏洞进行的攻击,攻击者通过在 XSS 攻击中注入恶意脚本,从而窃取用户的 Cookie 信息。 攻击者通常会利用已经存在的 XSS 漏洞,在受害者的…...

springmvc的拦截器,全局异常处理和文件上传

拦截器: 拦截不符合规则的,放行符合规则的。 等价于过滤器。 拦截器只拦截controller层API接口。 如何定义拦截器。 定义一个类并实现拦截器接口 public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest reque…...

TypeScript进阶实战:构建可维护的企业级应用

"这代码太难维护了!"接手一个海外客户的项目后,我不禁感叹道。虽然项目用了 TypeScript,但类型定义混乱,代码提示基本失效,测试写起来也很痛苦。作为一个有着多年 TypeScript 开发经验的工程师,我…...

请求go web后端接口 java安卓端播放视频

前端代码 添加gradle依赖 implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.0 添加访问网络权限 <uses-permission android:name"android.permission.INTERNET" />允许http 请求请求 andro…...

Java 学习(四)集合框架与异常处理

在 Java 编程中&#xff0c;集合框架和异常处理机制是开发高效、健壮程序的两个关键部分。掌握这两个方面的知识&#xff0c;能够大大提高代码的质量和可维护性。本篇博客将深入探讨 Java 集合框架和异常处理机制的核心概念&#xff0c;并结合实际案例&#xff0c;帮助你更好地…...

如何调用yolov8的模型(restful和c++)

文章目录 方法一、通过RESTful API调用(推荐)第一步:部署yolo8服务端第二步:java中调用api方法二、JNI调用(本地调用)第一步:编写c/c++封装代码第二步:生成jni头文件和动态库第三步:在java中调用jni函数参考: 1.window系统下从0开始搭建yolov8环境 2.pycharm下载 3.y…...

Avalonia 开发环境准备

总目录 前言 介绍如何搭建 Avalonia 开发环境。 一、在线开发环境搭建 请先安装您选择的受支持的IDE。Avalonia 支持 Visual Studio、Rider 和 Visual Studio Code。 详见&#xff1a;https://docs.avaloniaui.net/zh-Hans/docs/get-started/install 1. 使用 Visual Studio 20…...

工信部人工智能专业技术人员证书介绍

一、证书介绍 图中展示的是由工业和信息化部电子工业标准化研究院颁发的人工智能专业技术人员证书。该证书封面为深蓝色&#xff0c;带有纹理&#xff0c;显得专业且庄重。封面上有“ESI”标志&#xff0c;以及“人工智能专业技术人员证书”和“工业和信息化部电子工业标准化研…...

11篇--图像边缘检测

图像梯度 要学习图像边缘检测&#xff0c;要先了解图像梯度的概念&#xff0c;我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大&#xff08;不然不会有边缘呈现&#xff09;&#xff0c;所以给边缘附近的的梯度之变化很快&#xff0c;通过…...

【数值特性库】入口文件

数值特性库入口文件为lib.rs。该文件定义一系列数字特性的trait&#xff08;特征&#xff09;&#xff0c;这些特性可以被不同的数字类型实现&#xff0c;从而提供一套通用的数值操作方法。下面是对代码中关键部分的解释&#xff1a; 一、基础设置 #![doc(html_root_url “h…...

企业微信客户管理工具

软件下载 点击这里下载软件 使用指南 查看操作演示视频 点击这里观看视频教程 安装与注意事项 排除防病毒程序干扰(本程序无病毒&#xff0c;请放心使用).避免快捷键冲突(确保 CtrlA 等快捷键无其他程序占用). 操作流程 手动启动企业微信&#xff0c;打开“添加客户”界面…...

Unity 碎片化空间的产生和优化

文章目录 产生1. 动态内存分配2. 磁盘文件操作3. 内存池和对象池4. 数据结构导致的碎片5. 操作系统的内存管理6. 应用程序设计不当 碎片化空间的优化方案 产生 碎片化空间通常指内存或磁盘中的一种分配不连续、难以利用的现象&#xff0c;主要由以下原因产生&#xff1a; 1. …...

音视频学习(二十七):SRT协议

SRT&#xff08;Secure Reliable Transport&#xff09;是一种开源的网络传输协议&#xff0c;专为实时音视频数据传输设计&#xff0c;具有低延迟、高可靠性和安全性等特点。 核心功能 SRT协议旨在解决实时音视频传输中的网络抖动、丢包、延迟和安全问题&#xff0c;提供以下…...

【Canvas与艺术】红色3号桌球

【注】 此图立体感还差点&#xff0c;以后改进吧。 【成图】 120*120的png图标&#xff1a; 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8&q…...

2024-12-20 iframe嵌套与postMessage传值

iframe嵌套与postMessage传值 在Web开发中&#xff0c;iframe嵌套和postMessage传值是两个常用的技术&#xff0c;它们各自具有独特的用途和优势。本文将对这两项技术进行详细解析&#xff0c;并通过实例展示其使用方法。 一、iframe嵌套 什么是iframe嵌套&#xff1f; ifram…...

MFC 应用程序语言切换

在开发多语言支持的 MFC 应用程序时&#xff0c;如何实现动态语言切换是一个常见的问题。在本文中&#xff0c;我们将介绍两种实现语言切换的方式&#xff0c;并讨论其优缺点。同时&#xff0c;我们还会介绍如何通过保存配置文件来记住用户的语言选择&#xff0c;以及如何在程序…...

与您的数据对话: 用人工智能驱动的对象存储变革医疗保健

MinIO 的提示 API 现在是 AIStor 的一部分。MinIO 的创建是为了支持海量数据集&#xff0c;包括超过 EB 级的工作负载&#xff0c;解决内存、网络、复制和负载均衡方面的挑战&#xff0c;而 AIStor 的创建是为了建立在这些功能之上并解决我们客户的 AI 使用案例。作为 AIStor 的…...

WIN10拖入文件到桌面,文件自动移动到左上角,导致桌面文件错乱

1.先打开文件管理器。 2.点击如下图所示的“选项”。 3.我用红笔标记的这个框&#xff0c;把勾去掉...

JavaSE——绘图入门

一、Java绘图坐标体系 下图说明了Java坐标系&#xff0c;坐标原地位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二个是y坐标&#xff0c;表示当前位置为垂直…...

electron-vite打包后图标不生效问题

在electron-builder.yml中&#xff0c;通过icon配置自己的图标&#xff0c;以下是正确代码 win:executableName: 名称icon: build/icon.ico nsis:artifactName: ${name}-${version}.${ext}shortcutName: ${productName}uninstallDisplayName: ${productName}createDesktopShor…...

【MySQL】Linux使用C语言连接安装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

Linux计算时间差

Linux计算时间差 1、Linux计算时间差2、时间差的应用 1、Linux计算时间差 在Linux中&#xff0c;计算时间差通常是为了统计、监控或调试。时间差可以用来衡量任务执行的时间&#xff0c;或者两个事件之间的间隔。例如&#xff0c;响应时间、执行时间、定时任务与延时处理等 以…...

onlyoffice连接器 二次开发 合同等制式模板化技术开发方案【三】

一、期望效果 目前曹瑞版本onlyoffice已经实现&#xff1a;书签模式 和 控件模式&#xff0c;用以支持该方案。 【图1】字段绑定 【图2】模板发起 【图3】接入表单 思路讲解&#xff1a; 业务系统开发中通常希望能够通过绑定form字段给word&#xff0c;从而达到双向同步效果&am…...

【论文研读】U-DiTs:在U型扩散Transformer中引入下采样Token,以更低计算成本超越DiT-XL/2

推荐理由 这篇论文提出了一种新的U型扩散Transformer模型&#xff08;U-DiT&#xff09;&#xff0c;该模型通过对自注意力机制中的查询、键和值进行下采样&#xff0c;有效减少了计算冗余&#xff0c;同时提高了性能。论文中的研究不仅包含理论分析和实验验证&#xff0c;还展…...

2009 ~ 2019 年 408【计算机网络】大题解析

2009 年 路由算法&#xff08;9’&#xff09; 讲解视频推荐&#xff1a;【BOK408真题讲解-2009年&#xff08;催更就退网版&#xff09;】 某网络拓扑如下图所示&#xff0c;路由器 R1 通过接口 E1 、E2 分别连接局域网 1 、局域网 2 &#xff0c;通过接口 L0 连接路由器 R2 &…...

.net core在linux导出excel,System.Drawing.Common is not supported on this platform

使用框架 .NET7 导出组件 Aspose.Cells for .NET 5.3.1 asp.net core mvc 如果使用Aspose.Cells导出excel时&#xff0c;报错 &#xff1a; System.Drawing.Common is not supported on this platform 平台特定实现&#xff1a; 对于Windows平台&#xff0c;System.Drawing.C…...

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…...

3.使用SD卡挂载petalinux根文件系统

前言 说明为什么使用SD卡挂载petalinux根文件系统如何使用SD卡挂载根文件系统 配置根文件写入类型制作SD分区格式化SD卡将工程目录下的rootfs.tar.gz解压到SD EXT4分区 为什么使用SD卡挂载petalinux根文件系统 Petalinux 默认的根文件系统类型是 INITRAMFS&#xff0c;不能…...

Java反射学习(1)(Java的“反射“机制、Class类对象的实例化方式)

目录 一、Java的"反射"机制。 &#xff08;1&#xff09;生活中的"反射"例子。 &#xff08;2&#xff09;Java的"反射"机制。 1、Java程序中"反射"的基本介绍。 2、"反射"机制图解介绍。 3、"反射"常见的应用场景…...

paimon中的Tag

TAG 在传统数仓场景中&#xff0c;从传统数据库中导入的事实表数据一般是全量导入&#xff0c;按天分区每天都存储一份全量数据&#xff0c;paimon对此提供了Tag机制&#xff0c;创建TAG时&#xff0c;会对当前数据做一份全量快照&#xff0c;在之后对表的数据进行更新也不会影…...

使用Vue创建前后端分离项目的过程(前端部分)

前端使用Vue.js作为前端开发框架&#xff0c;使用Vue CLI3脚手架搭建项目&#xff0c;使用axios作为HTTP库与后端API交互&#xff0c;使用Vue-router实现前端路由的定义、跳转以及参数的传递等&#xff0c;使用vuex进行数据状态管理&#xff0c;后端使用Node.jsexpress&#xf…...

4、交换机IP接口功能

这一篇是讲端口的功能的&#xff0c;应该放在路由前面的&#xff0c;不过关联不大&#xff0c;就这个顺序也行 1、DHCP功能 作用&#xff1a;交换机端口的DHCP功能可以使网络中的设备&#xff08;计算机、打印机等等&#xff09;能够自动的获取IP地址或其它网络参数&#xff0…...

java 选择排序,涵盖工作原理、算法分析、实现细节、优缺点以及一些实际应用场景

选择排序的详细解析 更深入地探讨选择排序的各个方面&#xff0c;包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。 动画演示 1. 基本概念 选择排序是一种简单的比较排序算法。它的核心思想是将数组分为两个部分&#xff1a;已排序部分和未排序部分。每…...

基于springboot+vue实现的医院急诊(病房)管理系统 (源码+L文+ppt)4-122

摘要 医院急诊&#xff08;病房&#xff09;管理系统旨在优化患者的就诊流程&#xff0c;提高医疗效率和服务质量。该系统通过电子化患者信息、实时床位监控和智能调度等功能&#xff0c;确保急诊患者能够快速得到必要治疗&#xff0c;同时协助医护人员高效管理病房资源。系统…...