一、基本概念
-
定义
- SSH 是一种网络协议,用于在不安全的网络上安全地进行远程登录和其他网络服务。它通过加密技术提供了安全的通信通道,确保数据传输的保密性、完整性和认证性。
-
主要用途
- 远程登录:允许用户通过网络连接到远程服务器,就像在本地终端操作一样。例如,系统管理员可以从自己的办公电脑 SSH 到数据中心的服务器进行管理操作。
- 文件传输:支持安全的文件传输,如使用 SCP(Secure Copy)和 SFTP(SSH File Transfer Protocol)。这在备份数据、部署网站文件等场景中非常有用。
- 端口转发:可以将本地端口映射到远程服务器端口或者反之,用于访问受限制的网络资源或安全地访问内部服务。
二、工作原理
-
加密算法
- 对称加密:SSH 使用对称加密算法(如 AES)来加密传输的数据。在通信开始时,双方会协商一个密钥用于加密和解密数据。
- 非对称加密:利用公钥和私钥对来进行身份认证。服务器的公钥发送给客户端,客户端用这个公钥加密信息,只有服务器的私钥才能解密,从而保证了通信的安全性。
- 哈希算法:用于验证数据的完整性,如 SHA - 256。在数据传输过程中,会对数据进行哈希计算,接收方通过重新计算哈希值并与发送方提供的哈希值进行比较,来判断数据是否被篡改。
-
认证方式
- 基于密码的认证:这是最常见的认证方式。用户输入用户名和密码,客户端将其发送到服务器进行验证。不过这种方式相对安全性稍低,因为密码可能被窃取。
- 基于密钥的认证:更为安全。用户生成一对密钥(公钥和私钥),将公钥放置在服务器的授权密钥文件中。当客户端尝试连接时,服务器使用公钥加密一个随机数,客户端用私钥解密并返回结果,以此来验证身份。
三、SSH 客户端和服务器配置
-
服务器配置
- 安装和启动:在 Linux 系统中,通常使用包管理器(如 apt、yum)安装 OpenSSH 服务器软件(如 openssh - server),安装完成后启动服务(systemctl start sshd)。
- 配置文件修改:主要的配置文件是 sshd_config,在这里可以设置监听端口(默认为 22)、允许或禁止 root 登录、认证方式等选项。例如,要更改监听端口可以修改 “Port” 选项。
- 密钥管理:服务器的主机密钥在安装时自动生成,这些密钥用于识别服务器身份。如果主机密钥发生变化,客户端会收到警告,这可能意味着存在中间人攻击。
-
客户端配置
- 基本连接:在 Linux 或 macOS 系统中,可以使用命令行工具 “ssh” 进行连接。例如,“ssh user@server_ip”,其中 “user” 是远程服务器的用户名,“server_ip” 是服务器的 IP 地址。
- 配置文件(~/.ssh/config):可以在客户端的配置文件中设置常用的连接选项,如别名、代理设置、默认的密钥等。例如,可以为经常访问的服务器设置别名,这样通过别名就可以快速连接。
四,配置文件分析:
vim /etc/ssh/sshd_config
21.#Port 22 # 默认监听22端口,可修改
22.#AddressFamily any # IPV4和IPV6协议家族用哪个,any表示二者均有
23.#ListenAddress 0.0.0.0 # 指明监控的地址,0.0.0.0表示本机的所有地址(默认可修改)
24.#ListenAddress :: # 指明监听的IPV6的所有地址格式
26.#HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证,默认
27.#HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
28.#HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证
34 #SyslogFacility AUTH # ssh登录系统的时会记录信息并保存在/var/log/secure
35.#LogLevel INFO # 日志的等级
39.#LoginGraceTime 2m # 登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
40 PermitRootLogin yes # 允许管理员root登录
41.#StrictModes yes # 是否让sshd去检查用户主目录或相关文件的权限数据
42.#MaxAuthTries 6 # 最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
43.#MaxSessions 10 # 允许的最大会话数
49.AuthorizedKeysFile .ssh/authorized_keys # 选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
65 #PasswordAuthentication yes # 登录ssh时是否进行密码验证
66 #PermitEmptyPasswords no # 登录ssh时是否允许密码为空
……
123.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录