Linux中SSH服务

一、ssh是什么

SSH(Secure Shell)是一种用于安全远程登录计算机的协议。它提供了一个加密的通信通道,通常用于通过不安全的网络(如互联网)进行安全的远程管理、文件传输和执行命令等操作

SSH 的主要功能包括:

  1. 远程登录: 使用 SSH 可以安全地连接到远程主机,进行命令行操作。例如,你可以通过 SSH 登录到另一台计算机,在远程机器上执行命令,查看文件,修改配置等。

  2. 文件传输: SSH 也支持通过工具如 SCP(Secure Copy Protocol)和 SFTP(Secure File Transfer Protocol)进行安全的文件传输。SCP 可以在本地和远程计算机之间传输文件,而 SFTP 提供了类似 FTP 的交互式文件管理方式,但加密性更强。

  3. 加密通信: SSH 使用强加密算法来确保通信的机密性与完整性。即使攻击者窃听到传输的内容,由于内容是加密的,他们也无法读取其中的信息。

  4. 认证机制: SSH 提供了两种主要的认证方式:

    • 密码认证:用户输入密码来进行身份验证。
    • 公钥认证:用户使用 SSH 密钥对(公钥和私钥)进行认证,公钥存储在服务器上,私钥存储在用户的本地机器上。相比密码认证,公钥认证通常更安全。
  5. 端口转发: SSH 可以用来实现端口转发,将一个网络端口上的流量安全地转发到另一台计算机。通过 SSH 隧道(tunnel)可以绕过防火墙或 NAT 等限制,进行安全的网络连接。

二、为什么需要SSH

1、不安全登录telnet

准备机器:   

linux                master     10.0.0.61

Windows        本机

2、服务端要运行远程连接服务,telnet走的是telnet-server服务端,走的是23端口通信,而不是sshd服务端

安装telnet命令
[master root ~] # yum install telnet-server telnet -y
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                            | 3.6 kB  00:00:00     
epel                                                                            | 4.3 kB  00:00:00     
extras                                                                          | 2.9 kB  00:00:00     
updates                                                                         | 2.9 kB  00:00:00     
Package 1:telnet-0.17-66.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package telnet-server.x86_64 1:0.17-66.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================
 Package                    Arch                Version                     Repository            Size
=======================================================================================================
Installing:
 telnet-server              x86_64              1:0.17-66.el7               updates               41 k

Transaction Summary
=======================================================================================================
Install  1 Package

Total download size: 41 k
Installed size: 55 k
Downloading packages:
telnet-server-0.17-66.el7.x86_64.rpm                                            |  41 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:telnet-server-0.17-66.el7.x86_64                                                  1/1 
  Verifying  : 1:telnet-server-0.17-66.el7.x86_64                                                  1/1 

Installed:
  telnet-server.x86_64 1:0.17-66.el7                                                                   

Complete!
[master root ~] # systemctl start telnet.socket
[master root ~] # 

windows上安装telnet,power shell管理员打开,直接运行以下代码

enable-windowsoptionalfeature -online -featurename telnetclient

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-1160.71.1.el7.x86_64 on an x86_64
master-61 login: root
Password: 
Login incorrect


进入master-61服务端查看日志
[master-61 root ~] # less /var/log/secure
Jan  8 14:05:30 master login: pam_securetty(remote:auth): access denied: tty 'pts/0' is not secure !
Jan  8 14:05:35 master login: pam_unix(remote:auth): authentication failure; logname= uid=0 euid=0 tty=pts/0 ruser= rhost=::ffff:10.0.0.1  user=root
Jan  8 14:05:35 master login: pam_succeed_if(remote:auth): requirement "uid >= 1000" not met by user "root"
Jan  8 14:05:36 master login: FAILED LOGIN 2 FROM ::ffff:10.0.0.1 FOR root, Authentication failure

Jan  8 14:11:08 master login: pam_securetty(remote:auth): access denied: tty 'pts/1' is not secure !
Jan  8 14:11:09 master login: pam_succeed_if(remote:auth): requirement "uid >= 1000" not met by user "root"
Jan  8 14:11:12 master login: FAILED LOGIN 1 FROM ::ffff:10.0.0.1 FOR root, Authentication failure
Jan  8 14:11:17 master login: pam_securetty(remote:auth): access denied: tty 'pts/1' is not secure !

解释:
pam_securetty 模块是用来限制哪些终端可以进行 root 用户的登录。默认情况下,root 只能通过某些被认为是“安全的”终端进行登录。这些安全的终端通常在 /etc/securetty 文件中列出。pts/0 和 pts/1 是通过 telnet 远程登录时分配的伪终端,因此它们在默认情况下不被视为“安全终端”,导致 root 用户无法登录。



编辑配置文件,最后添加如下内容
[master-61 root ~] # vim /etc/securetty
pts/0
pts/1

/etc/securetty 文件:这个文件定义了哪些终端可以允许 root 用户登录。默认情况下,root 用户只能在某些指定的终端(如 tty1、tty2 等)上登录。如果允许 root 在通过 telnet 或 ssh 登录时使用某些伪终端(如 pts/0 或 pts/1),需要手动在该文件中添加这些终端

重新登录

[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-1160.71.1.el7.x86_64 on an x86_64
master-61 login: root
Password: 
Last failed login: Wed Jan  8 14:11:20 CST 2025 from ::ffff:10.0.0.1 on pts/1
There were 2 failed login attempts since the last successful login.
Last login: Wed Jan  8 14:08:29 from 10.0.0.1
[master-61 root ~] # 

三、sshd服务部署

1、检查是否安装sshd服务(每一台机器都是默认安装了sshd服务的 )

openssl 命令,给你用,去基于不同的算法,创建证书的命令
[master-61 root ~] # rpm -qa openssh
openssh-7.4p1-22.el7_9.x86_64

安装openssh服务,提供远程sshd服务
[master-61 root ~] # rpm -qa openssh-server
openssh-server-7.4p1-22.el7_9.x86_64

2、ssh基本安全配置

2.1 禁用root用户登录、降低权限(只能通过普通用户登录,提前创建好可登录的普通普通户)

创建普通用户,并设置用户密码
[master-61 root ~] # useradd test01

[master-61 root ~] # echo "123456" | passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.

2.2 修改/etc/ssh/sshd_config配置文件


修改sshd配置文件禁止root登录,默认22端口更改22999
[master-61 root ~] # cat /etc/ssh/sshd_config |grep PermitRootLogin
#PermitRootLogin yes
PermitRootLogin no
# the setting of "PermitRootLogin without-password".


[master-61 root ~] # cat /etc/ssh/sshd_config |grep Port
#Port 22
Port 22999
#GatewayPorts no

2.3 重启服务,查看服务进程

[master-61 root ~] # netstat -tunlp |grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      958/sshd            
tcp6       0      0 :::22                   :::*                    LISTEN      958/sshd            
[master-61 root ~] # systemctl restart sshd
[master-61 root ~] # 
[master-61 root ~] # netstat -tunlp |grep sshd
tcp        0      0 0.0.0.0:22999           0.0.0.0:*               LISTEN      2378/sshd           
tcp6       0      0 :::22999                :::*                    LISTEN      2378/sshd           
[master-61 root ~] # 

2.4 登录测试

ssh root@10.0.0.61 22999通过root登录报错
[C:\~]$ ssh root@10.0.0.61 22999


Connecting to 10.0.0.61:22999...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(10.0.0.61:22999) at 14:48:50.

普通用户登录正常
[C:\~]$ ssh test01@10.0.0.61 22999


Connecting to 10.0.0.61:22999...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
[master-61 test01 ~] $ 

2.5 恢复默认sshd配置

[master-61 root ~] # sed -i 's/^Port 2222999/Port 22/' /etc/ssh/sshd_config
[master-61 root ~] # cat /etc/ssh/sshd_config | grep Port
#Port 22
Port 22
#GatewayPorts no
[master-61 root ~] # sed -i 's/^PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config
[master-61 root ~] # cat /etc/ssh/sshd_config | grep PermitRootLogin
#PermitRootLogin yes
PermitRootLogin yes
# the setting of "PermitRootLogin without-password".
[master-61 root ~] # 
[master-61 root ~] # systemctl restart sshd
[master-61 root ~] # 
[master-61 root ~] # netstat -ntlp |grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2462/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      2462/sshd           
[master-61 root ~] # 


重新登录
[C:\~]$ ssh root@10.0.0.61


Connecting to 10.0.0.61:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last failed login: Wed Jan  8 14:48:47 CST 2025 from 10.0.0.1 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Wed Jan  8 14:23:15 2025 from ::ffff:10.0.0.1
[master-61 root ~] # 

四、pwgen随机密码生成工具

1、简介:pwgen 是一个用于生成随机密码的命令行工具,通常用于生成强密码,方便用户在需要时使用

2、pwgen使用

  1. -c--capitalize
    强制密码包含至少一个大写字母。
    示例:生成包含大写字母的密码。

  2. -A--no-capitalize
    不包含大写字母。
    示例:生成只包含小写字母、数字和特殊字符的密码。

  3. -n--numerals
    强制密码包含至少一个数字。
    示例:生成包含数字的密码。

  4. -0--no-numerals
    不包含数字。
    示例:生成不包含数字的密码。

  5. -y--symbols
    强制密码包含至少一个特殊符号(例如 !, @, #, $ 等)。
    示例:生成包含特殊符号的密码。

  6. -r <chars>--remove-chars=<chars>
    从密码生成字符集中移除指定的字符。<chars> 是要移除的字符列表。
    示例:如果你不想密码中包含字母 l 和数字 1,可以使用 -r "l1" 来移除这两个字符。

  7. -s--secure
    生成完全随机的密码,通常更难以猜测。
    示例:生成一个更强的、难以破解的密码。

  8. -B--ambiguous
    避免密码中包含可能造成混淆的字符。例如,避免使用字母 O 和数字 0,或者字母 I 和数字 1,以减少视觉上的歧义。
    示例:生成更易读且不容易混淆的密码。

  9. -h--help
    打印帮助信息,显示所有可用选项和它们的功能。
    示例:pwgen -h

  10. -H--sha1=path/to/file[#seed]
    使用指定文件的 SHA-1 哈希值作为伪随机数生成器。#seed 是一个可选的种子值,用来生成确定性的密码。
    示例:从指定文件的 SHA-1 哈希生成密码,可以用于某些特定的密码生成场景。

  11. -C
    将生成的密码按列打印。这个选项使密码输出更整齐,便于查看。
    示例:pwgen -C 10 会将 10 个密码按列输出。

  12. -1
    不按列打印密码,而是逐行输出单独的密码。默认情况下,pwgen 会按列输出多个密码。
    示例:pwgen -1 10 会将 10 个密码逐个列出,而不是按列输出。

  13. -v--no-vowels
    生成不包含元音字母(a, e, i, o, u)的密码,防止生成容易理解或带有恶搞含义的密码。
    示例:生成不含元音字母的密码,适合避免生成可能有负面含义的词语。

例如:

生成一个包含至少一个数字、一个大写字母和一个特殊符号的 12 字符密码
[master-61 root ~] # pwgen -n -c -y 12 1
wee~y4EiHah4

生成一个包含数字和特殊符号,但不包含大写字母的密码
[master-61 root ~] # pwgen -n -y -A 12 1
eeph2ha&ghue

生成 10 个密码,每个 8 个字符长,并按列显示
[master-61 root ~] # pwgen -C 8 10
be0Peezo ho1Nahth ieShohl3 eeV1ocoo doZ3xahz niuCh0ku fa1Mu2tu ea8cheiH
Ui1iehi6 johz6Doh

生成一个没有元音字母的 16 字符密码
[master-61 root ~] # pwgen -v 16 1
Hk4RjzsxK5dtfnm7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950916.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM vs JDK vs JRE

JVM是Java虚拟机的缩写&#xff0c; 用于实现Java的一次编译&#xff0c;处处运行。 Java代码写成.class后&#xff0c;由本地的虚拟机运行。 JDK&#xff08;Java Development Kit&#xff09;是一个功能齐全的 Java 开发工具包&#xff0c;供开发者使用。 JDK包含了JRE。…

Redis Zset有序集合

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Redis Zset有序集合 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 概述 普通命令 ZAD…

【漫话机器学习系列】040.降采样(downsampling)

降采样&#xff08;Downsampling&#xff09; 降采样&#xff08;Downsampling&#xff09; 是一种在数据处理中常见的技术&#xff0c;目的是通过减少数据的数量来简化模型、加快计算速度&#xff0c;或减少存储空间的需求。降采样的核心思想是从原始数据中选取代表性的样本&…

国内使用博查SearchAPI进行智能搜索,通过API获取搜索引擎的天气、日历、百科、手机、火车票等信息

在现代开发中&#xff0c;网络资源搜索是关键且常见的需求。博查SearchAPI作为国内领先的智能搜索解决方案&#xff0c;已服务超过2000家企业和16000名开发者&#xff0c;获得腾讯元器、字节扣子、阿里钉钉等官方推荐。该API提供近百亿网页内容及多样的生态合作内容&#xff0c…

前端学习DAY33(外边距的折叠)

垂直外边距的重叠 在网页中相邻的垂直方向的外边距&#xff0c;会发生外边距的重叠 兄弟元素 兄弟元素之间的相邻外边距会取&#xff08;绝对值&#xff09;最大值&#xff0c;而不是取和&#xff0c;谁大取谁 特殊情况&#xff1a;如果相邻的外边距一正一负&#xff0c;则取两…

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…

自动化脚本本地可执行但是Jenkins上各种报错怎么解决

作者碎碎念&#xff1a; 测试环境 Jenkinsdockerpythonunittest&#xff0c; 测试问题&#xff1a;本人在写关于SAP4Me网站的自动化脚本时遇到一个问题 本地怎么都跑的通 但是一上Jenkins会出现各种各样的问题 因为在Jenkins里面脚本是放在docker环境里面跑的 所以环境的差异…

Nginx入门笔记

Nginx入门笔记 一、Nginx基本概念二、代理1、正向代理2、反向代理 三、准备工作1、CentOS 7安装nginx&#xff08;1&#xff09;. 安装必要的依赖&#xff08;2&#xff09;下载nginx&#xff08;3&#xff09;编译安装&#xff08;4&#xff09;编译并安装 Nginx(5)启动nginx …

优化提示词改善答疑机器人回答质量

1.通过优化提示词来调整大模型的回答 1.1使用场景 默认提示词无法满足业务要求。 回答的内容太简单/困难&#xff0c;输出内容/格式/语气达不到要求等 1.2llama-index 的提示词模版 1.2.1llama-index 的默认模板 from llama_index.llms.dashscope import DashScope from lla…

HTML5 手风琴(Accordion)详解

HTML5 手风琴&#xff08;Accordion&#xff09;详解 手风琴&#xff08;Accordion&#xff09;是一种常用的用户界面控件&#xff0c;允许用户通过点击标题来展开或收起内容&#xff0c;适合用于显示大量信息而不占用太多空间。以下是手风琴的详细介绍及实现示例。 1. 手风…

maven如何从外部导包

1.找到你项目的文件位置&#xff0c;将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

Eclipse配置Tomcat服务器(最全图文详解)

前言&#xff1a; 本章使用图文讲解如何在Eclipse开发工具中配置Tomcat服务器、如何创建和启动JavaWeb工程&#xff0c;欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标&#xff1a; 一、配置Tomcat服务器 1. 切换Eclipse视图 2. 打开菜单 3. 找到服务选项 4. 选择…

汽车供应链关键节点:物流采购成本管理全解析

在汽车行业&#xff0c;供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付&#xff0c;涉及多个环节&#xff0c;其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节&#xff0c;探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…

软件工程期末整理(二)

快速原型开发模型是&#xff08;适用于客户需求难以清楚定义、规模较小的系统&#xff09;。(编写系统实施计划)不是系统设计阶段的主要活动 解释&#xff1a;系统实施计划”更侧重于后续的实施与部署阶段&#xff0c;属于项目管理层面的内容 协作性不属于构件的特性在类图中…

STM32-笔记35-DMA(直接存储器访问)

一、什么叫DMA&#xff1f; DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于…

代码管理助手-Git

前言 Git 是一个版本控制系统&#xff0c;可以帮助你记录文件的每一次修改。这样&#xff0c;如果你在编程时不小心把代码写错了&#xff0c;可以很容易地回退到之前的版本。最重要的是&#xff0c;Git 是完全免费的&#xff0c;用户可以在自己的计算机上安装和使用 Git&#x…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

Kubernetes Gateway API-4-TCPRoute和GRPCRoute

1 TCPRoute 目前 TCP routing 还处于实验阶段。 Gateway API 被设计为与多个协议一起工作&#xff0c;TCPRoute 就是这样一个允许管理TCP流量的路由。 在这个例子中&#xff0c;我们有一个 Gateway 资源和两个 TCPRoute 资源&#xff0c;它们按照以下规则分配流量&#xff1…

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者&#xff1a;来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库&#xff0c;这些报告包含由报告提供商生成的大量知识。然而&#xff0c;挑战在于&#xff0c;这些报告的内容通常以 PDF 格式存在&#xff0c;使得在处理安全事件或调查时难以检索和引用相关…

Unity学习之UGUI进阶

一、事件监听接口 1、作用 用于实现类型长按、双击、拖拽等基础控件无法实现的功能 所有控件都能够添加更多的事件监听来处理对应的逻辑 2、事件监听接口类型 &#xff08;1&#xff09;常用事件接口 &#xff08;2&#xff09;不常用事件接口 3、使用事件监听接口 &#…