SSH远程登录与控制教程

描述

SSH远程登录与控制

一 什么是ssh服务器

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。

SSH客户端<--------------网络---------------->SSH服务端

1 协议类型

• SSH(Secure Shell):SSH是一种加密网络协议,用于通过安全通道在不安全网络上进行远程访问和管理。它提供了加密的通信会话,包括远程登录和执行命令,以及传输文件等功能

• Telnet:虽然不安全,但仍然被用于远程登录到服务器或设备,通常用于简单的文本交互

• RDP(Remote Desktop Protocol):主要用于Windows系统,允许用户通过图形界面远程访问另一台计算机。

• VNC(Virtual Network Computing):允许用户远程控制另一台计算机的图形界面。它是跨平台的远程桌面协议。

• X11:用于在UNIX和Linux系统上进行图形界面的远程访问。

• ICA(Independent Computing Architecture):由Citrix Systems开发,用于提供应用程序和桌面虚拟化服务

2 ssh协议优点

数据传输是加密的,可以防止信息泄露

数据传输是压缩的,可以提高传输速度

• 加密通信:SSH协议通过加密技术,确保通信过程中的数据传输是安全的,防止数据被窃听或篡改

• **远程登录:**用户可以使用SSH协议远程登录到其他计算机或服务器,以便进行命令行操作、文件管理等任务

• 加密身份验证:SSH协议支持使用公钥和私钥对进行身份验证,这种方式比传统的基于密码的身份验证更加安全

• 端口转发:SSH协议支持端口转发,可以通过安全的通道在两个计算机之间建立安全的连接

• 远程执行命令:SSH允许用户在远程主机上执行命令,这对于自动化脚本和远程管理非常有用

• 文件传输:SSH协议还支持安全的文件传输,可以在客户端和服务器之间进行安全的文件传输和管理

作用

sshd 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。

ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务(文件传输功能)

3 SSH的 软件

SSH 客户端: xshell     putty      secureCRT      MobaXterm    finalshell 

SSH 服务端:openSSH (Centos 7 默认安装)

4 有关系的程序

• OpenSSH:OpenSSH 是 SSH 协议的免费开源实现,包括服务器端和客户端程序。它支持加密和身份验证功能,被广泛用于Linux和类Unix系统上

• PuTTY:PuTTY 是一个流行的免费的SSH和Telnet客户端程序,可在Windows平台上使用。它提供了SSH连接所需的工具和功能

• WinSCP:WinSCP 是一个免费的SFTP、SCP和FTP客户端程序,用于在Windows平台上与远程计算机进行安全文件传输。它支持SSH协议,提供了用户友好的界面

• SecureCRT:SecureCRT 是一个商业化的SSH客户端程序,提供了强大的功能和定制选项,适用于Windows、Mac和Linux操作系统

5 公钥传输原理

①客户端发起连接请求

②服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)

③客户端生成密钥对

④客户端用自己的公钥或会话ID,计算出一个值Res,并用服务端的公钥加密

⑤客户端发送加密后的值到服务端,服务端用密钥解密,得到Res

⑥服务端用解密后的Res或者是会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)

⑦最终:双方各持有三个密钥,分别为自己的一对公钥、私钥、以及对方的公钥,之后的所有的通讯都会被加密。

6 加密通讯原理

SSH

详细阐释:

首先ssh通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下

7 ssh远程登录文件

每次使用sshd登录到其他主机,双方都会生成一个文件known_hosts把对方主机的公钥在.ssh/known_hosts文件里。

8 如何确定此台机器就是我要连的机器?

1. ssh [选项] mcb@192.168.11.9         #指定登录用户、目标主机地址作为参数

2.  ssh -p 20 mcb@192.168.11.9         #-p为指定端口

二 ssh命令 远程连接

①直接连接:先输入ssh  IP

SSH

第一次连接服务端机器会询问是否要验证公钥,同意就会自动获取服务端公钥 

SSH

验证是否连接正确服务机,可查看服务端的公钥 

SSH

②连接指定用户

① ssh  用户名@IP地址

②ssh  -l 用户名  IP地址

SSH

③指定端口号

在  /etc/ssh/sshd_config文件修改端口号 

sshd服务的默认端口号是 22,如果不是此端口,需要 -p 来指定端口

[root@localhost ~]#vim /etc/ssh/sshd_config

SSH

[root@localhost ~]#systemctl restart sshd

在另一台虚拟机验证,使用客户机就需要指定端口号

SSH

跳板登录

提供了一种安全的方式管理和连接位于内部网络中的主机,同时限制了对内部网络的直接访问

 

#在目标服务端主机上模拟防火墙拒绝客户端连接,客户端使用跳板连接到目标主机上
[root@localhost .ssh]#iptables -A INPUT -s 192.168.11.5-j REJECT 
[root@localhost ~]#ssh -t 192.168.11.9 ssh 192.168.11.5

 

三  远程登录直接执行操作命令

#ssh  192.168.11.9  ifconfig

**白名单:**默认拒绝所有,只有白名单上允许的人才可以访问

**黑名单:**默认允许所有,只有黑名单上的用户让你不允许访问

注意     实验关闭防火墙  防护 黑白不能同时启用

修改服务端配置文件

root@localhost ~]#vim /etc/ssh/sshd_config

SSH

SSH

① 白名单,只能登录本机的mcb@用户

SSH

SSH

别的用户无法登录 

SSH

③禁止用户登录 ,此实验要反复去做

 

借鉴他人
 
[root@localhost ssh]#vim  /etc/ssh/sshd_config
#开启38 行 并改为 no,默认注释并写的yes
38 PermitRootLogin no
#注意虽然阻止了root 但是普通用户可以使用su
[root@localhost1 ~]#ssh zhangsan@192.168.91.100 -p 9527
zhangsan@192.168.91.100's password: 
Last login: Fri Aug 2716:50:352021
[zhangsan@localhost2 ~]$ 
[zhangsan@localhost2 ~]$ su root
密码:
[root@localhost2 zhangsan]#


修改 pam认证模块
[root@localhost ssh]#vim /etc/pam.d/su
#开启第6行,默认注释
6 auth            required        pam_wheel.so use_uid

 

vim /etc/ssh/sshd_config

38 #PermitRootLogin yes    把yes该为no
Xshell就登陆不上

修改pam认证模块,只允许wheel组用户可以使用    su

[root@localhost ~]# vim /etc/pam.d/su

6 #auth           required        pam_wheel.so use_uid
默认是注释掉,要让6行开启

操作如下:

[root@localhost ~]# vim /etc/pam.d/su

SSH

太遗憾了,过程忘了

四 SSH服务的最佳实践

①建议使用非默认端口22

 

vim /etc/ssh/sshd_config
#找到以下两个配置项:
port  123       #设置特定的ssh服务端口号

 

②禁止使用  protocol version 1

因为SSH协议版本一存在多个已知的安全漏洞,其使用的加密算法和密钥交换机制相对较弱,易受到中间人攻击等威胁

SSH 协议版本二已经成为现代标准,并且得到广泛支持,绝大多数 SSH 客户端和服务器都默认使用协议版本二,而且很多安全性工具也不再支持协议版本一

③限制可登录用户(白名单)

④设定空闲会话超时时长

 

vim /etc/ssh/sshd_config           #找到以下两个配置项:
 
ClientAliveInterval 0
 
ClientAliveCountMax 3

 

ClientAliveInterval:表示服务器向客户端发送空闲会话确认消息的时间间隔,单位为秒。默认值为0,表示不发送确认消息。将其设置为一个正整数,表示每隔多长时间向客户端发送一次确认消息。

ClientAliveCountMax:表示服务器向客户端发送确认消息后,客户端没有响应的最大次数。默认值为3,表示如果服务器连续发送3次确认消息后,客户端仍未响应,则认为客户端已经断开连接。将其设置为一个正整数,表示服务器最多发送多少次确认消息后,认为客户端已经断开连接

⑤利用防火墙设置SSH访问策略

 

#利用防火墙禁止特定IP地址:172.16.12.10访问
iptables -A INPUT -s 172.16.12.10 -j REJECT

 

⑥仅监听特定的IP地址、公网、内网

 

vim /etc/ssh/sshd_config           #找到以下三个配置项:
 
ClientAliveInterval 300

ClientAliveCountMax 2

ListenAddress 192.168.11.10

 

ClientAliveInterval:表示SSH服务器将向客户端发送空闲会话检查的时间间隔(以秒为单位),默认值为0,表示禁用此功能

ClientAliveCountMax:表示SSH服务器将向客户端发送空闲会话检查的最大次数,如果达到此次数后仍未收到客户端的响应,则会话将被终止,默认值为3

ListenAddress:监听特定的IP地址的SSH连接

⑦基于口令认证时,使用强密码策略

1. 比如:tr  -cd  [a-zA-Z0-9]  < /dev/random  |  head -c 12 | xargs

2. #设定12位的随机密码

⑧使用基于密钥的认知

⑨禁止使用空密码

 

vim /etc/ssh/sshd_config
 
#找到以下一个配置项:
 
PermitEmptyPasswords no #禁止使用空密码

 

⑩禁止root用户直接登录

11 限制ssh的访问频率和并发在线数

 

vim /etc/ssh/sshd_config           #找到以下一个配置项:
 
MaxStartups 10                   #最多允许10个并发连接,如果超过这个数量,会拒绝新的连接

 

使用PAM模块:通过Pluggable Authentication Modules (PAM) 可以实现更复杂的控制,
例如限制用户的并发登录数 

使用防火墙:你也可以使用防火墙软件如iptables来限制从特定IP地址发起的并发SSH连接数

12 经常分析日志分离

独立sshd服务日志文件:默认sshd服务日志在/var/log/secure下,可通过rsyslog程序将sshd服务日志文件独立出来放到特定的文件夹中,方便查看和管理。
(具体操作请查看《Linux文件系统与日志分析》博客)

使用日志分析工具:可以使用工具如grep、awk、sed等来分析SSH日志文件。这些工具可以帮助搜索特定的关键字、过滤信息、提取有用的数据等

设置日志轮转:为了避免日志文件过大,可以配置日志轮转。通过日志轮转,旧的日志文件会被重命名并压缩,同时创建新的日志文件。可以使用logrotate工具来实现日志轮转,并在其配置文件中指定SSH日志文件的处理方式(具体操作请查看《Linux文件系统与日志分析》博客) 

五 openSSH 服务器配置文件

openSSH是实现SSH协议的开源软件项目,适用于各种UNIX、Linux操作系统

执行“systemctl start sshd”命令即可启动sshd服务,默认端口使用的22端口

服务名称:sshd

服务端主程序:/usr/sbin/sshd  

服务端配置文件:/etc/ssh/sshd_config 

客户端配置文件:/etc/ssh/ssh_config

1 ssh配置文件信息

在linux中实现ssh,是通过opsnSSH的sshd服务提供的

SSH

2 存放ssh服务端的配置文件   /etc/ssh/sshd_config

[root@localhost ~]#vim /etc/ssh/sshd_config

SSH

 六  密钥对免交互     验证登录

有密码又无需输入密码

1 创建密钥,生成rsa算法密钥

SSH

2 传送到远程主机

SSH

3 登录验证

SSH

七 免交互登录

客户端先输入 ssh-agent  bash 将这个命令交给 bash 去管理

再输入 ssh-add  是将用户的私钥添加到运行中的 ssh-agent 中,这样在后续的SSH连接过程中,就不需要每次都手动输入私钥的密码了。一旦私钥被添加到ssh-agent 中,它会暂时保存解密后的私钥以供后续使用

 

[root@localhost .ssh]# ssh-agent bash                       #把sh-agent交给进程管理
 
[root@localhost .ssh]# ssh-add                                  #把密码交给sh-agent  

Enter passphrase for /root/.ssh/id_rsa:                      #输入密钥文件密码

Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

[root@localhost .ssh]# ssh 192.168.11.6         #无需密码即可登录,重启后失效

Last login: Sun Jan 21 1403 2024 from 192.168.11.9

注:机器重启就会失效

 

链接: https://blog.csdn.net/MCB134/article/details/135577909

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分