文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本篇文章对应 90DaysOfDevOps 2022 学习路线的 Day 18聚焦两个日常运维中最高频的任务用 SSH 安全地远程接入 Linux 服务器以及在一台 Ubuntu 虚拟机上从零搭起 LAMPLinux Apache MySQL PHP内网 Web 服务器。读完本文你将掌握桥接网络配置、SSH 服务端确认与密钥认证ed25519、禁用密码登录的加固方法以及 Apache/MySQL/PHP 的安装、配置与 WordPress 部署全流程。SSH 基础为什么远程管理离不开它什么是 SSHSSHSecure Shell安全外壳是一个网络协议用于在不安全的网络上建立安全通信。它的核心特性如下提供加密的安全通信通道可以为任意网络服务提供安全传输最典型的用途是远程命令行接入客户端与服务器之间建立加密隧道防止数据被恶意截获。在之前的 Linux 学习中我们其实已经在使用 SSH——不过那是通过 Vagrant 自动配置完成的只需执行vagrant ssh即可进入虚拟机中间的安全细节都被屏蔽掉了。仓库中 2022 学习路线使用的虚拟机定义VAGRANTFILE基于chenhan/ubuntu-desktop-20.04镜像SSH 服务的安装与配置正是在vagrant up阶段由 Vagrant 自动完成的。但真实的运维场景往往是服务器不在你身边可能部署在云端或位于只能通过公网访问的数据中心。这时你必须使用 SSH 建立一条客户端到服务器的安全隧道——服务器端始终运行着 sshd 服务并监听在TCP 22 端口客户端持有正确的凭据密码或密钥才能接入从源码角度看这一章的知识会在后续被反复复用Day 27 的网络章节正是基于“SSH 隧道是加密的、而 telnet 是明文”这一点选择 SSH 隧道来连接网络设备详见 Day 27。为 VirtualBox 虚拟机添加桥接网络适配器在默认 NAT 网络模式下外部客户端无法直接按 IP 访问虚拟机。为了从宿主机甚至局域网内其他机器用 SSH 直连需要给 VirtualBox 虚拟机加一块桥接网络适配器关闭Power down虚拟机在 VirtualBox 中右键虚拟机 → Settings设置→ Network网络将网络模式从 NAT 改为 Bridged Adapter桥接网卡并保存重新启动虚拟机此时它会在宿主机所在局域网内获得一个独立 IP用ip addr命令确认新获得的 IP 地址。桥接模式相当于让虚拟机直接“挂”在物理网络的交换机上宿主机与虚拟机变成局域网内的对等节点这正是后续 Putty/ssh 客户端能够直连 VM 的前提。确认 SSH 服务端正在运行由于 Vagrant 已在 provisioning 阶段装好并启动了 SSH 服务我们可以直接用 systemd 确认其状态sudo systemctl status ssh如果某台机器没有安装 SSH 服务端例如新装的最小化 Ubuntu则先安装sudo apt install openssh-server另外若系统启用了 UFW 防火墙需要放行 SSHsudo ufw allow ssh本教程的 Vagrant 环境已经通过 provisioning 自动化处理了放行因此这一步可跳过但生产服务器上这是必做项。远程接入方式一用户名 密码现在 sshd 已在 22 端口监听且虚拟机已获得桥接网络 IP我们就可以从宿主机用任意 SSH 客户端接入。Windows 下最常用的是 PuTTY在 PuTTY 的 Host Name 栏填入虚拟机 IPPort 保持 22Connection type 选 SSH点击 Open 发起连接见下图左侧 Session 配置界面首次连接该 IP 时PuTTY 会弹出 host key 指纹确认警告这是正常的确认后选择“是/Yes”以信任该主机并缓存指纹随后输入用户名vagrant与默认密码vagrant即进入虚拟机的远程 shell至此我们已经从远程客户端连上了虚拟机可以像在本地一样执行命令。注意本学习环境使用了vagrant默认账号密码仅限本地实验。任何暴露到网络上的真实服务器都不应保留默认凭据。远程接入方式二SSH 密钥认证推荐密码登录虽然简单但存在明显弱点一旦用户名、密码与公网 IP 同时泄露服务器就很容易被攻破。因此 SSH 密钥是更被推荐的方式。密钥对的概念SSH 密钥是一对公私钥私钥留在客户端必须保密公钥放到服务器端。建立连接时服务器用公钥验证客户端是否持有对应私钥从而确认“这是一个受信任的设备”实现免密且更难被暴力破解的认证。生成 ed25519 密钥对在任何装有 ssh-client 的系统Windows 的 PowerShell、Git Bash、Linux/macOS 终端上执行ssh-keygen -t ed25519-t ed25519指定使用Ed25519算法一种基于 Edwards 曲线的现代签名算法相比传统 RSA 密钥更短、更快、更安全交互式提示中可指定保存路径默认~/.ssh/id_ed25519与可选的 passphrase口令生成结果包含两个文件私钥id_ed25519与公钥id_ed25519.pub。在原文示例中密钥默认存放在 Windows 客户端的C:\Users\micha/.ssh/目录下。把公钥复制到服务器ssh-copy-id生成密钥后需要把公钥安装到目标服务器上标准做法是ssh-copy-idssh-copy-id vagrant192.168.169.135该命令会把本机公钥追加到服务器对应用户的~/.ssh/authorized_keys文件中之后该用户即可凭私钥免密登录。Windows 用户的注意事项PowerShell 自带的 OpenSSH 客户端没有ssh-copy-id命令可以改用 Git Bash内含该命令来执行复制正如原文作者所做的那样用密钥免密登录回到 PowerShell 或任意终端直接发起连接ssh vagrant192.168.169.135如果密钥匹配将不再提示输入密码直接进入远程 shell进一步加固禁止密码认证仅允许密钥密钥认证成功后还可以收紧安全策略——让服务器完全拒绝密码登录只接受密钥对。编辑 SSH 服务端配置文件sudo nano /etc/ssh/sshd_config找到默认被#注释掉的这一行#PasswordAuthentication yes取消注释并把yes改为noPasswordAuthentication no保存退出后重载 sshd 服务使配置生效sudo systemctl reload sshd补充说明reload会让 sshd 平滑重读配置而不中断现有连接生产环境还可同时关注PermitRootLogin no、PubkeyAuthentication yes等相关项。务必先确认密钥登录可用后再禁用密码否则可能把自己锁在服务器外。编辑/etc/ssh/sshd_config用到的 nano 编辑器其基础操作已在 Day 17 中系统介绍。从 SSH 到 Web Server搭建 LAMP 内网 Web 服务器接下来的目标和 SSH 无直接关系但同样是新手觉得“有点吓人”实则很简单的任务在这台 Linux 实验虚拟机上安装 Apache Web 服务器向家庭内网提供一个简单网站。注意该站点只在内网可达公网发布不在本文范围内。你可能听说过这套组合的另一个名字——LAMP 栈四个字母分别代表Linux 操作系统Apache Web 服务器MySQL 数据库PHP 脚本语言安装 Apache2Apache2 是开源的 HTTP 服务器安装命令sudo apt-get install apache2安装完成后重启服务验证sudo service apache2 restart然后打开浏览器访问之前通过 SSH 小节配置的桥接网络地址本例为http://192.168.169.135/应能看到 Apache 的默认欢迎页说明默认页面文件位于/var/www/html/index.htmlDebian/Ubuntu 的默认 Web 根目录。能看到该页面即说明 Web 服务器已在 80 端口正常对外提供服务。安装 MySQLMySQL 用于为网站存储数据安装命令sudo apt-get install mysql-server安装完成后服务端会以mysql系统服务形式运行稍后我们会用它创建 WordPress 所需的数据库与用户。安装 PHPPHP 是服务端脚本语言负责与 MySQL 交互并动态生成网页。安装 PHP 及其 Apache 模块、MySQL 扩展sudo apt-get install php libapache2-mod-php php-mysqllibapache2-mod-php让 Apache 能解析并执行.php文件php-mysql提供 PHP 连接 MySQL 数据库的驱动。让 Apache 优先解析 index.php默认配置下Apache 优先使用index.html作为目录默认页我们要把index.php提到最前面。编辑目录索引配置文件sudo nano /etc/apache2/mods-enabled/dir.conf将index.php移到列表首位原本形如DirectoryIndex index.html index.cgi index.pl index.php保存后重启 Apachesudo systemctl restart apache2验证 PHP 是否工作在 Web 根目录创建一个 PHP 测试文件sudo nano /var/www/html/90Days.php写入以下内容nano 中按 CtrlX、再按 Y 保存退出?php phpinfo(); ?然后在浏览器访问http://192.168.169.135/90Days.php如果 PHP 配置正确页面会显示完整的 PHP 配置信息版本、扩展、加载的模块等看到这个页面说明 PHP 已经成功接入 ApacheLAMP 前三层Linux Apache PHP MySQL 服务均已就绪。部署 WordPress 到 LAMP最后一步是在这套 LAMP 栈上部署 WordPress 博客系统。整个过程分为“数据库准备”和“程序文件部署”两大部分。1. 创建 WordPress 数据库与用户以 root 身份进入 MySQL 命令行sudo mysql -u root -p依次执行以下 SQL创建名为wordpressdb的数据库、专用用户并授权CREATE DATABASE wordpressdb; CREATE USER admin-userlocalhost IDENTIFIED BY password; GRANT ALL PRIVILEGES ON wordpressdb.* TO admin-userlocalhost; FLUSH PRIVILEGES; EXIT;权限说明wordpressdb.*表示仅对该库的全部表授权遵循最小权限原则admin-userlocalhost限定用户只能从本机连接。生产环境请务必把示例密码password换成强密码。2. 安装 PHP 扩展WordPress 依赖多个 PHP 扩展一次性安装sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip安装后重启 Apache 使新扩展生效sudo systemctl restart apache23. 下载并解压 WordPress切换到 Web 根目录所在父目录下载 WordPress 压缩包并解压cd /var/www sudo curl -O https://wordpress.org/latest.tar.gz sudo tar -xvf latest.tar.gz sudo rm latest.tar.gz此时/var/www/wordpress目录即为 WordPress 程序文件。4. 权限与 Apache 配置解压完成后需要确保 WordPress 目录的所有权与权限正确web 用户可读写例如chown -R www-data:www-data /var/www/wordpress一类的设置随后修改 Apache 的站点配置使其指向 WordPress 目录例如调整 DocumentRoot 或添加 VirtualHost 指向/var/www/wordpress。由于本次部署仅限内网使用可以跳过 WordPress 安装向导中的“生成安全密钥”步骤直接进入安装流程。5. 完成安装一切配置正确后在浏览器中访问虚拟机内网地址如http://192.168.169.135/wordpress即可运行 WordPress 的图形化安装向导填写前面创建的数据库名wordpressdb、用户名admin-user与密码完成站点初始化。小结与后续路线Day 18 的核心收获可以浓缩为两句话远程管理用 SSH密钥优先于密码内网建站用 LAMPApache MySQL PHP 一条命令即可起航。SSH 的隧道与密钥知识在后续网络章节Day 27中会再次被使用而 bash 脚本自动化Day 19则能把这些重复性的安装与配置工作沉淀为可复用脚本——例如仓库中 create-user.sh 这类用户管理脚本正是把本日命令行操作脚本化、自动化的方向。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps Day 18 实战SSH 安全远程访问与 LAMP Web 服务器搭建指南90DaysOfDevOps Day 18 实战SSH 安全远程访问与 LAMP Web 服务器搭建指南 本篇对应 2022/vi/Days/day18.md文档/教程90DaysOfDevOps 实战笔记SSH 远程安全连接与 LAMP Web 服务器搭建Day 1890DaysOfDevOps 实战笔记SSH 远程安全连接与 LAMP Web 服务器搭建Day 18 在 DevOps 日常工作中管理大量远程 Lin文档/教程90DaysOfDevOps Day 18SSH 安全远程连接与 LAMP 网站服务器实战指南90DaysOfDevOps Day 18SSH 安全远程连接与 LAMP 网站服务器实战指南 本指南对应 90DaysOfDevOps https://li文档/教程上一篇OpenDesign 新手贡献指南PR 与 Issue 的语音规则newcomer-tone下一篇DBX 数据库连接空闲失效恢复机制全解PIP-0001 超时预算、取消链路与前端状态兜底创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?