欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

DevOps] 详细分析:SSH 协议工作原理、安全配置和实用技巧

最编程 2024-06-09 22:23:02
...

目录

一、SSH的关键特性

二、SSH 原理

三、SSH 工具和命令

四、安装 SSH

Debian/Ubuntu 系统

CentOS/RHEL 系统

Fedora 系统

 五、配置 SSH

六、设置密钥认证

七、防火墙设置

使用 ufw (Ubuntu/Debian)

使用 firewalld (CentOS/RHEL/Fedora)

八、总结


SSH(Secure Shell)是一种网络协议,用于在不安全的网络中提供安全的远程登录和其他安全网络服务。SSH 允许加密传输数据,防止数据在传输过程中被截取和篡改,从而提供了一个安全的远程操作方式。

一、SSH的关键特性

1、加密:SSH 使用强加密算法(如 AES、ChaCha20、Blowfish)来加密整个会话,确保数据传输的安全性和隐私。

2、认证:SSH 支持多种认证方式,包括基于密码的认证和基于公钥的认证。其中,基于公钥的认证更为安全,因为它依赖于非对称密钥对。

3、完整性保护:SSH 使用 MAC(Message Authentication Code)算法来保护数据的完整性,防止数据在传输过程中被篡改。

4、信道复用:SSH 支持在一个加密连接上同时传输多个逻辑通信通道,使得用户可以通过一个 SSH 连接实现多种数据传输任务,如命令行Shell访问、端口转发和文件传输。

5、端口转发:SSH 可以将任意的 TCP 端口通过 SSH 连接转发,分为本地端口转发、远程端口转发和动态端口转发,这提高了网络通信的安全性。

6、代理功能:SSH 可以配置为 SOCKS 代理,允许用户通过 SSH 客户端转发浏览器等应用的网络请求,从而实现安全浏览。

7、会话管理:SSH 提供了会话层管理,用户可以在不同的会话中执行命令,支持会话暂停、断点续传等操作。

二、SSH 原理

SSH 通信过程分为三个主要阶段:

1、协议协商:SSH 客户端和服务器端首先协商使用的 SSH 协议版本,然后选择加密算法、压缩算法、MAC 算法等。

2、密钥交换:通过密钥交换算法(如 Diffie-Hellman)安全地协商出一个共享密钥,用于之后的会话加密。这个阶段也包括服务器的身份验证,通常通过比较服务器的公钥指纹来完成。

3、用户认证:客户端使用选定的认证方法(密码、公钥等)向服务器证明其身份。

三、SSH 工具和命令

1、ssh:最常用的 SSH 客户端命令,用于启动一个加密的 Shell 会话到远程服务器。

ssh username@hostname

2、scp:基于 SSH 的安全文件复制工具。

scp source_file username@hostname:destination_folder
scp username@hostname:source_file destination_folder

3、sftp:安全文件传输协议,提供了一个交互式的文件传输会话。

sftp username@hostname

4、ssh-keygen:用于生成 SSH 密钥对的工具。

ssh-keygen -t rsa -b 4096

5、ssh-copy-id:用于将本地的 SSH 公钥复制到远程服务器的 ~/.ssh/authorized_keys 文件,简化公钥认证的设置。

ssh-copy-id username@hostname

6、ssh-agent 和 ssh-addssh-agent 是一个密钥管理器,ssh-add 是用于将私钥加入到 ssh-agent 的工具,用于管理 SSH 私钥和自动化密码输入。

eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa

四、安装 SSH

在 Linux 系统中,最常见的 SSH 实现是 OpenSSH。以下是在不同 Linux 发行版上安装 OpenSSH 服务端和客户端的方法:

Debian/Ubuntu 系统

1、安装 OpenSSH 服务器和客户端:

sudo apt update
sudo apt install openssh-server openssh-client

2、启动 SSH 服务:

sudo systemctl start ssh

3、设置 SSH 服务开机自启:

sudo systemctl enable ssh

4、检查 SSH 服务状态:

sudo systemctl status ssh
CentOS/RHEL 系统

1、安装 OpenSSH 服务器和客户端:

sudo yum install openssh-server openssh-clients

2、启动 SSH 服务:

sudo systemctl start sshd

3、设置 SSH 服务开机自启:

sudo systemctl enable sshd

4、检查 SSH 服务状态:

sudo systemctl status sshd
Fedora 系统

1、安装 OpenSSH 服务器和客户端:

sudo dnf install openssh-server openssh-clients

2、启动 SSH 服务:

sudo systemctl start sshd

3、设置 SSH 服务开机自启:

sudo systemctl enable sshd

4、检查 SSH 服务状态:

sudo systemctl status sshd

 五、配置 SSH

SSH 的配置文件位于 /etc/ssh/sshd_config。以下是一些常见的配置项:

1、Port: 指定 SSH 服务器监听的端口,默认为 22。

Port 22

2、PermitRootLogin: 控制是否允许 root 用户登录。推荐设置为 no,使用普通用户登录后再切换到 root。

PermitRootLogin no

3、PasswordAuthentication: 是否允许基于密码的登录。为了安全,可以设置为 no,使用密钥登录。

PasswordAuthentication yes

4、PubkeyAuthentication: 是否允许基于公钥的登录。

PubkeyAuthentication yes

5、AllowUsers: 指定允许远程登录的用户。

AllowUsers username

6、UsePAM: 是否使用 PAM(Pluggable Authentication Modules)。

UsePAM yes

六、设置密钥认证

1、在客户端生成密钥对:

ssh-keygen -t rsa -b 4096

2、将公钥复制到服务器:

ssh-copy-id username@server_ip

3、确保服务器的 ~/.ssh/authorized_keys 包含客户端的公钥。

  • 测试密钥登录:

    ssh username@server_ip
    

七、防火墙设置

确保防火墙允许 SSH 端口 (默认为 22) 的流量。

使用 ufw (Ubuntu/Debian)
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status
使用 firewalld (CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload

八、总结

通过上述步骤,你可以在 Linux 系统上安装和配置 SSH,使用更安全的密钥认证方式登录。这些步骤提供了基本的安全配置,但根据具体需要,你可能需要调整更多的高级配置选项。

推荐阅读