首页 > 其他分享 >ssh安全登录

ssh安全登录

时间:2023-12-12 21:03:34浏览次数:28  
标签:10.0 公钥 登录 安全 61 0.61 ssh root

一.连接服务器的方式

不安全登录telnet

1.准备好客户端、服务端
客户端只要可以提供telnet命令即可,默认连接服务器的23端口号
windows
telnet  10.0.0.61 

2.服务端要运行远程连接服务,telnet走的是telnet-server服务端,走的是23端口通信,而不是ssd服务端
运行telnet-server服务
yum install telnet-server telnet -y

启动telnet服务端
[root@m-61 ~]#systemctl start telnet.socket

3.使用telnet命令,登录linux服务端
[C:\~]$ telnet   10.0.0.61
Connecting to 10.0.0.61:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Kernel 3.10.0-862.el7.x86_64 on an x86_64
m-61 login: 
Password: 
^CLogin incorrect

m-61 login: root
Password: 
Last login: Wed Apr 27 09:37:46 from 10.0.0.1
[root@m-61 ~]#
1.关于root ,账户密码连接的加密,解密流程

[email protected]
123123





2.关于root,公私钥连接的加密,解密流程

3. 配置ssh的免密登录(生成公私钥)

4. 学习修改sshd的服务端配置文件修改(修改端口,禁止密码登录,只允许公钥登录)

(重点)SSH基于用户名密码认证原理

问题来了,我该如何确认,找到这个公私钥在哪呢?

要测试基于账户密码认证的登录形式,需要准备2个机器
客户端(windows,linux)
windows
打开cmd,xshell,只识别windows提供的dos命令
还提供了一个工具,叫做git-bash工具,利用这个工具,打开的终端,能识别部分的linux命令,去操作你的windows

# 输入如下命令,首次连接某个linux机器
#1.首次连接,需要用户自己确认机器的指纹信息,输入yes确认后
服务端会发送公钥给客户端,记录到客户端的 ~/.ssh/knows_hosts
ssh [email protected]

2.查看客户端记录的 cat  ~/.ssh/known_hosts  ,记录了服务端的公钥信息
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ cat  ~/.ssh/known_hosts
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= 

证明,在linux服务端,看到了基于ssh 密码认证的,公私钥文件信息
[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 ~]#

既然看懂了公私钥,非对称验证形式,我们也就可以利用该特性,完成公钥登录,代替密码登录。(利用客户端的公钥表示自己的身份,而不是用服务端的密码去验证了)

如何确认目标机器的正确性(了解)

首次连接,服务端是让你输入yes,确认该机器的指纹是否正确

指纹信息,是通过公钥,基于sha256加密而来
1.看指纹是什么
yu@DESKTOP-1TDLFH9 MINGW64 ~/Desktop
$ ssh [email protected]
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 [email protected] ,基于公钥确认,先得知该机器的公钥信息

两个办法,获取到机器公钥信息
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 [email protected]
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做对比,是否一致

机器指纹信息

ssh-keygen扫描公钥

ssh-keyscan命令,可以获取目标机器的公钥信息,通过web-7扫描 rsync-41机器的公钥

查看机器公钥

直接去rsync-41机器上检查公钥信息

指纹是公钥加密而来(sha256算法)

计算rsync-41机器的指纹,再和我们第一次ssh连接的命令比较是否一致

ssh密码认证小结

  • SSH是Linux下远程管理的工具,相比Telnet安全,运维人员必备的神器!
  • SSH的全称Secure Shell,安全的shell,是Client/Server架构,默认端口号为22,TCP协议
  • 必须搞懂SSH通信加密的原理、过程
需要总结
- ssh密码认证的原理,与配置文件,涉及的linux命令
- ssh指纹确认与公钥的原理,与配置文件,涉及的linux命令
- ssh密码认证涉及的所有配置文化(服务端,客户端)

二.(服务器安全)sshd服务部署

软件安装
修改配置文件
启动
使用

搭建所有服务的套路

  • 关闭防火墙和selinux(实验环境都先关闭掉)
  • 配置yum源(公网源或者本地源)
  • 软件安装和检查
  • 了解并修改配置文件
  • 启动服务检查运行状态并设置开机自启动

搭建SSH服务

1.关闭防火墙和selinux

2.配置yum源

3.软件安装

确认是否安装openssh

由于每一台机器都是默认安装了sshd服务的,可以随便用任何一台机器测试

[root@master-61 ~]#rpm -qa openssh
openssh-7.4p1-21.el7.x86_64
openssl 命令,给你用去基于不同的算法,创建证书的命令
安装openssh服务,提供远程sshd服务
[root@m-61 ~]#rpm -qa openssh-server
openssh-server-7.4p1-21.el7.x86_64

# 默认yum有2个功能,1是安装,2是升级
yum install openssh-server openssh -y

ssh基本安全配置

提升服务器ssh安全,就是来修改该配置文件了,先来看简单的配置;

1.禁用root用户登录、降低权限(只能通过普通用户登录,提前创建好可登录的普通普通户)
[root@master-61 ~]#useradd yiyuan
[root@master-61 ~]#pwgen -sn|head -1
S611sFsG
[root@master-61 ~]#pwgen -sn|head -1 > random-pw.txt
[root@master-61 ~]#cat random-pw.txt 
pfjFWaE6
[root@master-61 ~]#cat random-pw.txt | passwd --stdin yiyuan
Changing password for user yiyuan.
passwd: all authentication tokens updated successfully.

修改
[root@master-61 ~]#cat /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no

2.修改端口,22666
Port 22666

3.查看这俩配置参数
grep -Ei '^permitRootLogin|^port'  /etc/ssh/sshd_config 
grep -Ei '^(permitRootLogin|port)'  /etc/ssh/sshd_config 

pwgen随机密码生成工具

必须配置epel源,不然无法安装该命令
yum install pwgen -y

ssh安全登录_ssh

服务管理

[root@master-61 ~]#netstat -tunlp |grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4643/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      4643/sshd           
[root@master-61 ~]#systemctl restart sshd
[root@master-61 ~]#netstat -tunlp |grep sshd
tcp        0      0 0.0.0.0:22666           0.0.0.0:*               LISTEN      5678/sshd           
tcp6       0      0 :::22666                :::*                    LISTEN      5678/sshd      

登录测试

加上端口
默认不让root登录了
[C:\~]$ ssh [email protected] 22666

恢复默认配置

sed改回去
permitRootLogin yes
port 22

先看看参数
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 


标签:10.0,公钥,登录,安全,61,0.61,ssh,root
From: https://blog.51cto.com/yiyuan/8790636

相关文章

  • 日志审计在网络安全中的重要性
       日志审计是一种通过分析、识别和验证各种日志信息,以帮助企业了解其网络和系统的安全状态和活动的过程。这些日志信息可能来自各种来源,包括服务器、网络设备、应用程序、操作系统等。日志审计的主要功能包括:识别潜在的安全威胁:通过对日志信息的分析,可以识别出异常或可疑的......
  • 保护信息安全的利器 —— DataSecurity Plus
    在当今数字化时代,数据安全已成为企业不可或缺的一环。随着信息技术的飞速发展,数据不仅是企业的核心资产,也承载着用户、客户以及公司的隐私。为了保护这些宝贵的数据,企业需要强大而综合的安全解决方案。在这个背景下,ManageEngine的DataSecurityPlus崭露头角,成为信息安全领域的璀璨......
  • uniapp+node.js+mysql前后端微信小程序授权登录
    文章目录一、前端代码?1.微信授权登录的页面(没有样式,自己写)2.”我的“页面3.封装request.js的页面4.vuex的状态管理的页面5.添加了识别有放token的没有登录就自动跳转登录的功能的main.js页面二、后端代码1.数据库连接页面(sql.js)2.数据库页面封装查询用户与插入用户信息的页面以及......
  • 设备指纹技术引入,提升三方支付安全
    随着互联网和移动互联网的发展,三方支付已经成为人们日常生活中不可或缺的一部分。然而,在享受三方支付带来的便利和效率的同时,我们也不能忽视其所面临着多种业务安全挑战。例如,在线交易中可能存在欺诈者利用虚假信息或恶意软件进行盗刷或转账操作;用户或商户在使用三方支付平台时可......
  • 浏览器中导出导入证书,https网站报非安全链接
    1、查看证书信息2、点击“网站非安全链接”3、点击“证书信息”,然后导出。4、保存证书至文件夹5、打卡Internet选项,找到内容-证书6、找到“受信任的根证书颁发机构”点击导入。7、找到导出的证书文件,导入即可。......
  • Guardrails for Amazon Bedrock 基于具体使用案例与负责任 AI 政策实现定制式安全保障
    作为负责任的人工智能(AI)战略的一部分,您现在可以使用 GuardrailsforAmazonBedrock(预览版),实施专为您的用例和负责任的人工智能政策而定制的保障措施,以此促进用户与生成式人工智能应用程序之间的安全交互。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术......
  • springboot listener、filter登录实战
    转载自:www.javaman.cn博客系统访问:http://175.24.198.63:9090/front/index登录功能1、前端页面采用的是layui-admin框架,文中的验证码内容,请参考作者之前的验证码功能<!DOCTYPEhtml><htmllang="zh"xmlns:th="http://www.thymeleaf.org"><head><title>ds博客</tit......
  • linux下创建ssh账号并设置指定使用目录
    场景:在linux系统下创建用户,并使用xshell登录,一般我们使用key登录,安全性高1.使用xshell连接服务器,使用root账号sudosu2.创建一个新的系统用户,使用以下命令:sudouseradd-m<username>3.设置该用户的密码,使用以下命令:sudopasswd<username>系统将提示你输入该用户的新密码......
  • vscode ssh 一直需要输入密码且最后显示连接失败
    参照这一篇执行就成功了,大佬很强很强。但是有几个点要注意的,我总结成下面几个步骤:先在本地用ssh连接,直到失败,查看日志上加锁的文件。日志在下面vscode这个界面找到。找到一条:[09:14:20.176]>Acquiringlockon/home/zhangyasheng/.vscode-server/bin/c3f126316369cd610563......
  • Linux ssh配置
    LinuxSSH配置设置公私秘钥pass只允许秘钥登陆鉴于实验室服务器经常被爆破登陆现在设置只允许秘钥登陆sudovim/etc/ssh/sshd_config修改sshd_config文件PubkeyAuthenticationyes#启用公告密钥配对认证方式RSAAuthenticationyes#允许RSA密钥Password......