1.基础知识和概念
1.1. 什么是SSH?
SSH的全称和作用:- SSH,全称Secure Shell,就像是互联网上的“安全快递”,确保你的数据在网络上传输时不会被偷窥或篡改。它是一种协议,为远程访问计算机和在网络上安全传输文件提供了加密的通信通道。
SSH的历史和发展:- 想象一下,互联网就像一片繁忙的海洋,信息在这里自由流动。SSH好比是寄信时使用的封口蜡,确保你的通信内容在传输过程中不被窥探或篡改。在上个世纪90年代初,SSH由芬兰学者Tatu Ylönen发明,最初是为了解决远程登录的安全问题。如今,SSH已经成为互联网安全的重要保障,为远程管理和文件传输提供了可信赖的安全通道。
1.2. SSH的工作原理
SSH的工作原理是基于对称加密和非对称加密的巧妙组合,以及安全的密钥交换过程。
对称加密和非对称加密:- 对称加密: 就像一把能同时打开和锁住的钥匙,对称加密使用相同的密钥(钥匙)进行加密和解密。这种方式速度很快,但需要确保密钥在传输中不被窃取。- 对称加密好比同学之间分享的秘密盒子和魔法钥匙:想象一下,你和你的好朋友之间有一个神奇的秘密盒子,你们都有一把相同的魔法钥匙。这个盒子就像你们两个之间的通信管道,只有用这把特殊的魔法钥匙才能打开。当你想传递信息给朋友时,你就把信息放进盒子里,然后用大家都有的魔法钥匙把盒子锁上。你的朋友收到盒子后,用相同的魔法钥匙打开,就可以看到你传递的信息。这就是对称加密,大家都共用同一把魔法钥匙,信息在通信过程中通过这个共同的"盒子"进行保护。- 非对称加密: 就像一对儿不同的钥匙,一个用于加密,另一个用于解密。非对称加密更安全,但速度较慢。非对称加密则是像发贺卡一样的过程:现在,假设你和你的好朋友有一对独一无二的魔法贺卡。每个人都有一张卡片,一张是公开的,另一张是私密的。你可以把公开的卡片给任何人,因为只有你自己的私密卡片才能打开它。所以,当你想要传递信息时,你用朋友的公开卡片把信息锁在卡片上,只有朋友自己的私密卡片才能解锁,看到里面的内容。这就是非对称加密,每个人都有自己独特的一对"魔法贺卡",用其中一个加密,用另一个解密。这种方式更加安全,因为不同于对称加密的共用钥匙,每个人都有自己专属的解锁方式。
密钥交换过程:- 在SSH的初始连接中,远程主机和客户端使用非对称加密生成一对密钥,分别是公钥和私钥。这时候,就好比远程主机送给客户端一把锁(公钥),而客户端自己保留一把只能打开这把锁的钥匙(私钥)。- 当客户端需要与远程主机通信时,它使用远程主机的公钥对数据进行加密,确保只有远程主机的私钥能解开。这就好比用锁(公钥)保险箱,只有正确的钥匙(私钥)才能打开。- 这种密钥交换方式使得在网络传输中,即使有人截获了加密的数据,也无法解密,因为没有私钥。
2.1. 安装SSH客户端和服务端
在CentOS 7发行版上安装SSH客户端和服务端非常简单,只需按照以下步骤进行:
- 安装SSH服务端(sshd):打开终端,执行以下命令安装SSH服务端:
yum install openssh-server
上述命令会从CentOS软件仓库中安装OpenSSH服务器。
2.安装SSH客户端(ssh):
同样在终端中执行以下命令安装SSH客户端:
yum install openssh-clients
这会安装SSH客户端工具,使你可以通过终端连接到其他计算机。
3.启动SSH服务:
安装完服务端后,执行以下命令启动SSH服务:
systemctl start sshd
为了确保SSH服务在系统启动时自动运行,你还可以运行以下命令:
systemctl enable sshd
这样,SSH服务就会在系统启动时自动启动。
4.检查SSH服务状态:
可以使用以下命令检查SSH服务的运行状态:
systemctl status sshd
如果服务正常运行,你会看到服务状态为"active"。
通过这些步骤,你就成功在CentOS 7上安装了SSH客户端和服务端。现在你可以使用SSH客户端连接到其他计算机,或者让其他计算机连接到你的计算机。
2.SSH的安装与配置
2.2. 配置SSH服务器和客户端
在安装完SSH服务端和客户端后,进行一些基本的配置可以提高系统的安全性和灵活性。
修改SSH配置文件:- 打开SSH服务端的配置文件(
sshd_config
):nano /etc/ssh/sshd_config#也可以使用 vim来修改。
- 在配置文件中,你可以调整一些参数,例如更改SSH监听的端口、禁用root用户直接登录等。修改完成后,保存并关闭文件。- 重新加载SSH服务,使配置生效:systemctl restart sshd
限制用户访问:- 如果你想限制哪些用户可以通过SSH登录,可以编辑
sshd_config
文件,添加如下内容:AllowUsers username1 username2
这样只有列出的用户可以登录SSH。如果你想禁止特定用户登录,可以使用DenyUsers
。- 保存并关闭文件后,重新加载SSH服务。- 对于客户端,如果你希望通过SSH连接时使用特定的用户名,可以在连接命令中指定用户名:ssh username@remote_host
这些简单的配置步骤可以帮助你根据实际需求定制SSH服务和客户端,提高系统的安全性和适用性。
2.3. SSH密钥认证的设置
使用SSH密钥对进行认证可以提高安全性,同时简化了密码登录的繁琐过程。
- 生成SSH密钥对:- 打开终端,运行以下命令生成SSH密钥对:
ssh-keygen -t rsa -b 2048
这将生成一个2048位的RSA密钥对。你可以按照提示输入保存密钥的文件路径和设置密码。 - 将公钥添加到目标主机上:- 使用
ssh-copy-id
命令将生成的公钥添加到目标主机上。这里需要知道目标主机的用户名和IP地址。ssh-copy-id username@remote_host#username 登录到目标主机的用户名,比如root#remote_host 目标主机的域名或者IP地址
如果目标主机上没有ssh-copy-id
命令,你可以手动复制本地生成的公钥(通常在~/.ssh/id_rsa.pub
)的内容,然后粘贴到目标主机的~/.ssh/authorized_keys
文件中。 - 测试SSH密钥认证:- 确保你已经设置了SSH密钥对后,尝试通过SSH连接到目标主机:
ssh username@remote_host#username 登录到目标主机的用户名,比如root#remote_host 目标主机的域名或者IP地址
如果一切设置正确,你将无需输入密码就能够成功登录目标主机。
通过这些步骤,你成功地设置了SSH密钥认证,提高了连接的安全性,并简化了登录过程。
3.SSH的基本用法
3.1. SSH连接命令
SSH连接命令是使用SSH协议进行远程连接的关键。下面介绍基本的SSH连接命令以及如何指定端口和用户名。
- 基本的SSH连接命令:- 使用最基本的SSH连接命令,你只需在终端中输入:
ssh remote_host
其中,remote_host
是目标主机的IP地址或域名。如果是默认的22号端口,SSH将使用该端口进行连接。 - 指定端口和用户名:- 如果目标主机的SSH服务监听在非默认的端口上,可以使用
-p
参数指定端口号:ssh -p 2222 remote_host
这里的2222
是目标主机上SSH服务的端口号,你可以根据实际情况修改。- 如果要使用不同的用户名登录目标主机,可以在连接命令中添加目标用户名:ssh username@remote_host
这将使用username
作为登录目标主机的用户身份。
通过这些SSH连接命令,你可以在终端中方便地建立与远程主机的安全连接,实现远程管理和文件传输等操作。
3.2. 用户身份验证方式
在SSH连接中,用户身份验证是确保连接安全的重要步骤。以下是两种常见的用户身份验证方式:密码登录和密钥登录。
- 密码登录:- 在默认情况下,当你使用SSH连接到远程主机时,系统将要求你输入目标用户的密码:
ssh username@remote_host
- 然后,你会被提示输入密码。这种方式简单直接,但相对较为容易受到暴力破解的攻击,因此在高安全要求的环境中需要格外小心。 - 密钥登录:- 使用SSH密钥对进行身份验证是更安全和便利的方式。在设置好SSH密钥对后,连接命令如下:
ssh -i /path/to/private_key username@remote_host
--i
参数指定私钥的路径。-/path/to/private_key
是本地私钥文件的路径。- 如果你之前设置了SSH密钥对,并将公钥添加到目标主机上,你将无需输入密码即可登录。
通过选择适当的用户身份验证方式,你可以根据实际需求在方便和安全之间找到平衡点。密钥登录通常被推荐用于提高连接的安全性。
3.3. 管理多个SSH密钥
当你需要连接到不同的远程主机,或者使用多个身份时,管理多个SSH密钥变得很重要。以下是使用ssh-agent管理多个密钥和切换不同密钥身份的步骤。
- 使用ssh-agent管理密钥:- 启动ssh-agent:
eval "$(ssh-agent -s)"
- 添加你的SSH私钥到ssh-agent:ssh-add /path/to/private_key
这里的/path/to/private_key
是你想要添加的私钥文件的路径。- 输入私钥的密码,将私钥添加到ssh-agent中。 - 切换不同密钥身份:- 当你有多个SSH密钥时,你可以通过ssh-add命令来切换不同的密钥身份。
ssh-add -l # 列出当前添加到ssh-agent的密钥ssh-add -D # 清除ssh-agent中所有的密钥
- 例如,如果你希望切换到另一个密钥,只需运行:ssh-add /path/to/another_private_key
然后输入新密钥的密码。
通过使用ssh-agent,你可以更轻松地管理多个SSH密钥,并在不同的场景中切换身份,而无需手动输入每个密钥的密码。这提高了SSH连接的便捷性和安全性。
4.安全性和最佳实践
4.1. SSH协议版本的选择
SSH协议有两个主要的版本,分别是SSH1和SSH2。了解它们之间的差异对于确保连接的安全性和性能至关重要。
- SSH1:- 特点:- 较早的版本,存在一些安全漏洞。- 使用单一密钥系统,易受暴力破解攻击。- 性能相对较差。- 不再被推荐使用,因为存在严重的安全问题。
- SSH2:- 特点:- 当前广泛使用的版本,修复了SSH1的安全漏洞。- 支持多种身份验证方法,包括密码、公钥和其他更安全的方式。- 采用更强大的加密算法,提高了安全性。- 性能更好,支持压缩和并发连接。- 支持端口转发、X11转发等功能。
- 选择协议版本的建议:- 默认使用SSH2: 几乎所有现代SSH实现都默认使用SSH2,因为它更安全且性能更好。- 禁用SSH1: 在安全性要求较高的环境中,应禁用SSH1协议以防止潜在的漏洞。- 升级软件版本: 始终确保你的SSH客户端和服务器使用最新的软件版本,以获得最新的安全修复和功能改进。
4.2. 防范SSH暴力破解
SSH暴力破解是一种常见的安全威胁,但你可以采取一些措施来防范这种类型的攻击。其中一种常见的方法是使用工具,如
fail2ban
,来提高系统的安全性。
- 使用
fail2ban
进行保护:- 安装fail2ban
: 在大多数Linux发行版中,你可以使用包管理工具安装fail2ban
:sudo yum install fail2ban # 对于CentOSsudo apt-get install fail2ban # 对于Ubuntu
- 配置fail2ban
: 编辑/etc/fail2ban/jail.conf
文件,配置SSH部分以启用对SSH暴力破解的保护。你可以调整相关参数,如maxretry
(最大尝试次数)和bantime
(封禁时间)。[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 3600
- 重启fail2ban
服务:sudo systemctl restart fail2ban
-fail2ban
会监控SSH登录尝试,如果尝试次数达到设定的阈值,将自动禁止相关IP一段时间。 - 其他防范措施:- 使用SSH密钥: 密钥身份验证比密码更安全,因为它不容易受到暴力破解攻击。- 更改SSH端口: 将SSH服务端口更改为非默认端口,可以减少自动化扫描的风险。
- 监控SSH日志:- 定期检查SSH登录日志(通常在
/var/log/auth.log
)以及fail2ban
的日志,以确保没有异常登录尝试。
通过使用
fail2ban
等工具,并采取一些基本的安全措施,你可以有效地防范SSH暴力破解攻击,提高系统的安全性。
4.3. SSH配置最佳实践
通过采用一些最佳实践,你可以提高SSH服务的安全性。以下是一些推荐的配置实践:
- 禁用不安全的认证方式:- 在
sshd_config
文件中,禁用不安全的认证方式,如密码认证,以便采用更安全的身份验证方式:PasswordAuthentication no
这样,只有使用SSH密钥进行身份验证的用户可以登录。 - 限制root用户的SSH登录:- 同样在
sshd_config
文件中,禁止root用户直接通过SSH登录:PermitRootLogin no
推荐创建一个普通用户,使用该用户登录,然后通过sudo
或其他适当的方式获取root权限。 - 使用非默认的SSH端口:- 修改SSH服务监听的端口,减少被自动扫描的风险。在
sshd_config
中修改Port
:Port 2222 # 选择一个不易被扫描到的端口
注意要在防火墙中打开相应的端口。 - 配置空闲连接断开时间:- 设置空闲连接断开时间,以防止未活动的连接被滥用。在
sshd_config
中添加:ClientAliveInterval 300ClientAliveCountMax 2
这将在300秒(5分钟)内没有活动时断开连接。 - 定期更新SSH软件:- 确保你的SSH软件是最新版本,以获得最新的安全修复和性能改进。
- 使用强密码和多因素身份验证:- 确保用户设置强密码,并鼓励或要求使用多因素身份验证(MFA)。
- 监控SSH登录日志:- 定期检查SSH登录日志以及系统的安全事件日志,以及时发现异常活动。
通过采用这些最佳实践,你可以显著提高SSH服务的安全性,减少潜在的攻击风险。
4.4 常用的SSH工具
常用的SSH工具,适用于不同平台,并提供了相应的下载链接:
- OpenSSH:- 平台: Linux、Unix、macOS- 下载链接: OpenSSH通常预安装在大多数Linux、Unix和macOS系统中,无需额外下载。
- PuTTY:- 平台: Windows- 下载链接: PuTTY Download Page
- WinSCP:- 平台: Windows- 下载链接: WinSCP Download Page
- MobaXterm:- 平台: Windows- 下载链接: MobaXterm Download Page
此外,推荐国内用户使用以下两个开源(免费)软件。
- FinalShell:- 特点:- FinalShell是一款集成了SSH、Telnet、SFTP和其他网络工具的全功能终端模拟器。- 提供了友好的用户界面,支持多标签、多窗口管理,以及便捷的文件传输。- 支持SSH密钥身份验证,会话管理,自动登录等功能。- 适用平台: Windows- 官方网站: FinalShell
- WindTerm:- 特点:- WindTerm是一款轻量级的终端模拟器,专注于提供简单而高效的SSH连接体验。- 具有简洁的界面和快捷的操作,适用于需要快速连接到远程服务器的场景。- 提供基本的终端功能,支持SSH和Telnet。- 适用平台: Windows- 官方网站: WindTerm
版权归原作者 黄去冰 所有, 如有侵权,请联系我们删除。