ssh远程访问及控制

目录

一、ssh协议简介

1、实现远程访问的协议和程序

2、ssh协议的概念及功能

3、ssh协议的工作原理

[3.1 对称加密与非对称加密](#3.1 对称加密与非对称加密)

[3.1.1 对称加密(Symmetric Encryption)](#3.1.1 对称加密(Symmetric Encryption))

[3.1.2 非对称加密(Asymmetric Encryption)](#3.1.2 非对称加密(Asymmetric Encryption))

[3.2 公钥传输的原理](#3.2 公钥传输的原理)

[3.3 加密通讯的原理](#3.3 加密通讯的原理)

二、openSSH程序

1、openSSH程序及配置文件

2、ssh命令基本用法

[2.1 直接远程连接](#2.1 直接远程连接)

[2.2 连接指定用户](#2.2 连接指定用户)

[2.3 指定端口号](#2.3 指定端口号)

[2.4 跳板登录](#2.4 跳板登录)

[2.5 远程执行命令操作](#2.5 远程执行命令操作)

3、黑白名单

[3.1 黑名单](#3.1 黑名单)

[3.2 白名单](#3.2 白名单)

4、禁止root用户登录

5、ssh服务器的最佳调优

三、使用密钥对免交互验证登录

1、创建密钥

2、将密钥文件传送到远程服务端

[3、 登录验证](#3、 登录验证)

4、免交互登录(无须密钥密码验证)


一、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开发,用于提供应用程序和桌面虚拟化服务

程序:

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

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

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

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

接下来主要详细介绍ssh协议和OpenSSH程序

2、ssh协议的概念及功能

SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中安全地进行远程访问和管理。它通过加密数据传输,防止信息被窃听或篡改

功能:

  • 加密通信:SSH协议通过加密技术,确保通信过程中的数据传输是安全的,防止数据被窃听或篡改
  • 远程登录:用户可以使用SSH协议远程登录到其他计算机或服务器,以便进行命令行操作、文件管理等任务
  • 加密身份验证:SSH协议支持使用公钥和私钥对进行身份验证,这种方式比传统的基于密码的身份验证更加安全
  • 端口转发:SSH协议支持端口转发,可以通过安全的通道在两个计算机之间建立安全的连接
  • 远程执行命令:SSH允许用户在远程主机上执行命令,这对于自动化脚本和远程管理非常有用
  • 文件传输:SSH协议还支持安全的文件传输,可以在客户端和服务器之间进行安全的文件传输和管理

3、ssh协议的工作原理

3.1 对称加密与非对称加密

3.1.1 对称加密(Symmetric Encryption)
  • 概念:在对称加密中,加密和解密使用相同的密钥。发送方使用密钥将消息加密,接收方使用相同的密钥将消息解密。常见的对称加密算法包括AES(高级加密标准)、DES(数据加密标准)和3DES等

  • 优点:对称加密算法加密和解密速度快,适合大量数据的加密和解密操作

  • 缺点:密钥的安全分发是对称加密的一个挑战,因为发送方和接收方都需要共享相同的密钥。如果密钥在传输过程中被截获,那么加密的安全性就会受到威胁

3.1.2 非对称加密(Asymmetric Encryption)
  • 概念:在非对称加密中,加密和解密使用不同的密钥,分别称为公钥和私钥。公钥用于加密,私钥用于解密。常见的非对称加密算法包括RSA、Diffie-Hellman和ECC(椭圆曲线加密)等

  • 优点:非对称加密算法解决了密钥分发的问题,因为公钥可以公开发布,而私钥则只有接收方知道

  • 缺点:非对称加密算法的加密和解密速度比对称加密算法慢,因此不适合大规模数据的加密和解密操作

| 区别 | 对称加密 | 非对称加密 |
| 密钥数量 | 使用相同的密钥进行加密和解密 | 使用不同的密钥进行加密和解密 |
| 速度 | 较快 | 较慢 |
| 密钥分发 | 需要解决密钥分发的问题 | 通过公钥和私钥的方式解决了密钥分发的问题 |

安全性 较低 更高

3.2 公钥传输的原理

SSH协议中的公钥传输原理通常涉及到公钥认证和密钥交换

详细阐释:

① 客户端向服务端发起连接请求

② 服务端接收到请求后,返回自己的公钥以及一个会话id(此处客户端得到服务端的公钥)

③ 客户端生成密钥对,客户端用自己的公钥异或会话id,计算出一个值res,并用服务端的公钥加密

④客户端发送加密值到服务端,服务端用私钥解密,得到res

⑥ 服务端用解密后的值res异或会话id,计算出客户端的公钥(此处服务端得到客户端公钥)

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

3.3 加密通讯的原理

详细阐释:

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

二、openSSH程序

1、openSSH程序及配置文件

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

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

sshd:服务名称

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

/etc/ssh/sshd_config:服务端配置文件,设置与服务端相关的应用可通过此文件实现

/etc/ssh/ssh_config:客户端配置文件,设置与客户端相关的应用可通过此文件实现

**~/.ssh/known_hosts:**客户端用来存储已知服务端公钥信息的文件

①当SSH客户端连接到一个新的服务端时,它会检查这个服务端的公钥是否在~/.ssh/known_hosts 文件中。如果公钥在这个文件中,则说明这个服务端是可信的,SSH 客户端会继续连接并进行认证;如果公钥不在这个文件中,则 SSH 客户端会给出一个警告,提示用户这个服务端可能不是可信的,并询问用户是否继续连接

②如果客户端之前已经连接过这个服务端,那么它就会在 ~/.ssh/known_hosts 文件中找到这个服务端的公钥,并使用它进行加密通信。(再次连接时,可通过对比文件中的公钥来确定连接的服务器是否正确)。如果客户端之前没有连接过这个服务端,那么它就会将这个服务端的公钥添加到 ~/.ssh/known_hosts 文件中,以便下次连接时使用

注:

如果服务端的公钥发生了变化,比如重新安装了操作系统或者更换了硬件,那么客户端会提示服务端的公钥发生了变化,并询问用户是否继续连接。这是因为公钥的变化可能意味着服务端的身份已经被篡改,因此需要用户确认服务端的身份。(解决方法:将之前的密钥文件删除,重新连接新的服务端,生成新的密钥文件)

2、ssh命令基本用法

用于建立安全的远程连接

2.1 直接远程连接

bash 复制代码
ssh   IP地址

2.2 连接指定用户

bash 复制代码
ssh   用户名@IP地址
ssh   -l   用户名  IP地址

2.3 指定端口号

bash 复制代码
ssh    ip地址     -p    端口号

首先可在服务端的/etc/ssh/sshd_config配置文件修改端口号

bash 复制代码
systemctl restart sshd     #重启sshd服务,修改的配置才能生效

那在客户端远程连接服务端时,可通过-p选项来指定服务端的端口号才能登录

2.4 跳板登录

SSH跳板登录(SSH jump host)是一种通过一个中间主机(跳板主机)来访问其他无法直接访问的目标主机的方法。它提供了一种安全的方式来管理和连接到位于内部网络中的主机,同时限制了对内部网络的直接访问

使用SSH命令从本地计算机连接到跳板主机,再通过跳板主机连接到目标主机

bash 复制代码
ssh  -t  跳板机ip地址  ssh  -t  跳板机ip地址    ........  ssh  -t  目的机ip地址  
bash 复制代码
#在目标服务端主机上模拟防火墙拒绝客户端连接,客户端使用跳板连接到目标主机上
[root@localhost .ssh]#iptables -A INPUT -s 172.16.12.10 -j REJECT 
[root@localhost ~]#ssh -t 172.16.12.12  ssh 172.16.12.13

2.5 远程执行命令操作

SSH服务可以通过远程执行命令的方式进行远程操作。通过在ssh命令后直接跟上要执行的命令,可以在远程主机上执行该命令而无需登录到远程主机的shell中

bash 复制代码
 ssh   ip地址    想使用的命令

3、黑白名单

SSH的黑白名单通常指的是用于限制SSH连接的IP地址列表,以便控制哪些IP地址可以连接到SSH服务器(黑名单)或者哪些IP地址不允许连接到SSH服务器(白名单)

3.1 黑名单

黑名单是一种限制访问的方式,其中列出的IP地址被禁止连接到SSH服务器,而不在黑名单的IP地址允许连接到SSH服务器

设置黑名单:

①通常由系统管理员在SSH服务器的配置文件中定义。在OpenSSH中,这通常是在/etc/ssh/sshd_config文件中进行配置

②可以使用DenyUsersDenyGroups选项来指定禁止连接的用户或用户组

3.2 白名单

白名单是一种允许访问的方式,其中列出的IP地址被允许连接到SSH服务器。只有在白名单中列出的IP地址才能建立SSH连接,其他IP地址将被拒绝

设置白名单:

①通常由系统管理员在SSH服务器的配置文件中定义。在OpenSSH中,这通常是在/etc/ssh/sshd_config文件中进行配置

②可以使用AllowUsersAllowGroups选项来指定允许连接的用户或用户组

在172.16.12.12服务器上配置:允许所有主机连接本机的mimi用户,却只允许172.16.12.10主机连接本机的dh用户,修改完之后重启sshd服务

只允许172.16.12.10客户端连接服务端的dh用户

允许所有主机连接本机的mimi用户

4、禁止远程连接到服务器的root用户

修改服务端配置:禁止root用户登录,再重启sshd服务

5、ssh服务器的最佳调优

①建议使用非默认端口

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

②禁止使用protocol version 1

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

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

③限制可登录用户的白名单

详细操作可参考上面的黑白名单

④设定空闲会话超时时长

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

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

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

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

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

⑥仅监听特定的IP地址

bash 复制代码
vim /etc/ssh/sshd_config
#找到以下三个配置项:
ClientAliveInterval 300
ClientAliveCountMax 2
ListenAddress 172.16.12.10

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

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

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

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

bash 复制代码
比如:tr  -cd  [a-zA-Z0-9]  < /dev/random  |  head -c 12 | xargs
#设定12位的随机密码

⑧使用基于密钥的认证

详细操作参考下面的使用密钥对免交互验证登录

⑨禁止使用空密码

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

⑩禁止远程连接到服务器的root用户

详细操作参考上面的禁止远程连接到服务器的root用户

⑪限制ssh的访问频度和并发在线数

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

使用PAM模块:通过Pluggable Authentication Modules (PAM) 可以实现更复杂的控制,

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

⑫经常分析、分离日志

独立sshd服务日志文件:默认sshd服务日志在/var/log/secure下,可通过rsyslog程序将sshd服务日志文件独立出来放到特定的文件夹中,方便查看和管理。

(具体操作请查看《Linux文件系统与日志分析》博客)
使用日志分析工具:可以使用工具如grepawksed等来分析SSH日志文件。这些工具可以帮助搜索特定的关键字、过滤信息、提取有用的数据等
设置日志轮转:为了避免日志文件过大,可以配置日志轮转。通过日志轮转,旧的日志文件会被重命名并压缩,同时创建新的日志文件。可以使用logrotate工具来实现日志轮转,并在其配置文件中指定SSH日志文件的处理方式(具体操作请查看《Linux文件系统与日志分析》博客)

三、使用密钥对免交互验证登录

1、创建密钥

可指定算法类型:输入 ssh-keygen -t ed25519 (ecdsa)

bash 复制代码
[root@localhost ~]#ssh-keygen     #客户端创建密钥

2、将密钥文件传送到远程服务端

bash 复制代码
#客户端将密钥传送到远程服务端
[root@localhost ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.12.10

3、 登录验证

此时我们去登录服务端,会使用密钥文件进行验证,提高了安全性

为保障更安全,可开启密钥验证,关闭密码验证,如此只有密钥的客户端才可连接到远程服务端

4、免交互登录(无须密钥密码验证)

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

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

但重启客户端设备后就会失效,需要重新进行上述操作

相关推荐
北京智和信通5 分钟前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控
fasewer9 分钟前
第五章 linux实战-挖矿 二
linux·运维·服务器
楚灵魈35 分钟前
[Linux]从零开始的网站搭建教程
linux·运维·服务器
小小不董37 分钟前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
DY009J1 小时前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器
什么鬼昵称2 小时前
Pikachu- Over Permission-垂直越权
运维·服务器
码农小白2 小时前
linux驱动:(22)中断节点和中断函数
linux·运维·服务器
4647的码农历程2 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
醉颜凉3 小时前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证
C++忠实粉丝4 小时前
Linux环境基础开发工具使用(2)
linux·运维·服务器