Linux是一套自由和开放源码的类Unix操作系统,诞生于1991年,由Linus Torvalds创建。它是现代互联网基础设施的基石——全球Top100万网站中96.3%运行在Linux上,Android手机、智能电视、路由器、云服务器几乎全部基于Linux内核。
┌─────────────────────────────────────┐ │ 用户空间 (User Space) │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌──────┐ │ │ │ GUI │ │ CLI │ │ App │ │ Libs │ │ │ └──┬──┘ └──┬──┘ └──┬──┘ └──┬───┘ │ │ └────────┼───────┼───────┘ │ │ ┌────▼────┐ │ │ │ glibc │ │ │ └────┬────┘ │ ├──────────────┼───────────────────────┤ │ 系统调用接口 │ ├──────────────┼───────────────────────┤ │ 内核空间 (Kernel Space) │ │ ┌───────┐ ┌───────┐ ┌───────┐ │ │ │ 进程 │ │ 内存 │ │ 文件 │ │ │ │ 管理 │ │ 管理 │ │ 系统 │ │ │ └───────┘ └───────┘ └───────┘ │ │ ┌───────┐ ┌───────┐ ┌───────┐ │ │ │ 网络 │ │ 设备 │ │ IPC │ │ │ │ 协议栈│ │ 驱动 │ │ 机制 │ │ │ └───────┘ └───────┘ └───────┘ │ ├─────────────────────────────────────┤ │ 硬件抽象层 (HAL) │ │ CPU | 内存 | 磁盘 | 网卡 | GPU │ └─────────────────────────────────────┘
Linux内核本身只是操作系统的核心,发行版=D内核+工具链+包管理器+默认配置。选择发行版是DevOps工程师的第一步:
作为DevOps工程师,99%的时间你通过SSH远程操作服务器。SSH(Secure Shell)是加密的网络协议,替代了不安全的Telnet。
# 查看内核版本
uname -r
# 输出示例: 5.15.0-91-generic
# 查看完整系统信息
uname -a
# Linux devops-lab 5.15.0-91-generic #101-Ubuntu SMP x86_64 GNU/Linux
# 查看发行版信息
cat /etc/os-release
# NAME="Ubuntu"
# VERSION="22.04.3 LTS (Jammy Jellyfish)"
# ID=ubuntu
# PRETTY_NAME="Ubuntu 22.04.3 LTS"
# 查看CPU信息
lscpu | head -20
# Architecture: x86_64
# CPU(s): 4
# Model name: Intel(R) Xeon(R) CPU
# 查看内存
free -h
# total used free
# Mem: 7.8Gi 2.1Gi 4.2Gi
# Swap: 2.0Gi 0B 2.0Gi
# 创建新用户(DevOps最佳实践:不用root)
sudo useradd -m -s /bin/bash devops
sudo passwd devops
# 添加sudo权限
sudo usermod -aG sudo devops
# 切换用户
su - devops
# 查看当前用户信息
whoami # devops
id # uid=1001(devops) gid=1001(devops) groups=1001(devops),27(sudo)
# 查看登录历史
last -5
# devops pts/0 192.168.1.100 Tue May 19 10:30 still logged in
# 生成SSH密钥对(Ed25519算法,更安全更快)
ssh-keygen -t ed25519 -C "devops@company.com"
# Generating public/private ed25519 key pair.
# Your identification has been saved in /home/devops/.ssh/id_ed25519
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3Nza... devops@company.com
# 复制公钥到远程服务器
ssh-copy-id devops@192.168.1.100
# SSH安全配置
sudo vi /etc/ssh/sshd_config
# 修改以下配置:
# Port 2222 # 修改默认端口
# PermitRootLogin no # 禁止root登录
# PasswordAuthentication no # 禁用密码认证
# MaxAuthTries 3 # 限制尝试次数
# 重启SSH服务
sudo systemctl restart sshd
# 使用配置连接
ssh -p 2222 devops@192.168.1.100
# Ubuntu/Debian 包管理
sudo apt update # 更新索引
sudo apt upgrade -y # 升级所有包
sudo apt install nginx -y # 安装nginx
apt list --upgradable # 查看可升级包
dpkg -l | grep nginx # 查看已安装包
# CentOS/RHEL 包管理
sudo dnf check-update
sudo dnf install nginx -y
rpm -qa | grep nginx
# systemd服务管理
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重启
sudo systemctl enable nginx # 开机自启
sudo systemctl status nginx # 查看状态
# 查看所有正在运行的服务
systemctl list-units --type=service --state=running
# 创建SSH配置文件
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat > ~/.ssh/config << 'EOF'
# 生产环境
Host prod
HostName 10.0.1.100
User devops
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
# 测试环境
Host staging
HostName 10.0.2.100
User devops
Port 22
IdentityFile ~/.ssh/id_ed25519
# 跳板机配置
Host bastion
HostName 203.0.113.10
User jump
IdentityFile ~/.ssh/jump_key
Host internal-*
ProxyJump bastion
User devops
EOF
chmod 600 ~/.ssh/config
# 现在可以直接使用别名连接
ssh prod # 等同于 ssh -p 2222 devops@10.0.1.100
ssh staging # 等同于 ssh devops@10.0.2.100
┌─────────────┐
│ 开发者笔记本 │
│ (macOS/WSL) │
└──────┬───────┘
│ SSH (密钥认证)
▼
┌─────────────────────┐
│ 跳板机/Bastion │
│ (安全入口点) │
└──────────┬──────────┘
│ SSH ProxyJump
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 生产集群 │ │ 测试环境 │ │ CI/CD │
│ │ │ │ │ Runner │
│ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │
│ │ Nginx│ │ │ │ App │ │ │ │ Build│ │
│ ├──────┤ │ │ ├──────┤ │ │ ├──────┤ │
│ │ App │ │ │ │ DB │ │ │ │ Test │ │
│ ├──────┤ │ │ └──────┘ │ │ └──────┘ │
│ │ DB │ │ └──────────┘ └──────────┘
│ └──────┘ │
└──────────┘
客户端 服务器 ┌──────┐ ┌──────┐ │ 私钥 │ 1. 请求连接 │ 公钥 │ │(id_ │──────────────────────▶│ │ │ed25519)│ 2. 服务器发随机挑战 │ │ │ │◀──────────────────────│ │ │ │ 3. 私钥签名挑战 │ │ │ │──────────────────────▶│ │ │ │ 4. 公钥验证签名 │ │ │ │ │ 验证 │ │ │ 5. 认证成功/失败 │ 通过✅ │ │ │◀──────────────────────│ │ └──────┘ └──────┘
# 1. 检查网络连通性
ping -c 3 192.168.1.100
# 如果ping不通 → 检查防火墙/网络路由
# 2. 检查端口是否开放
telnet 192.168.1.100 22
# 或使用nc
nc -zv 192.168.1.100 22
# Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!
# 3. 检查SSH服务是否运行
sudo systemctl status sshd
# 4. 查看SSH日志
sudo journalctl -u sshd --since "1 hour ago"
# 5. 使用详细模式调试
ssh -vvv devops@192.168.1.100
💡 常见原因:防火墙阻断、SSH服务未启动、IP变更、DNS解析失败
# 1. 检查密钥权限(最常见问题)
ls -la ~/.ssh/
# 正确权限:
# -rw------- id_ed25519 (600)
# -rw-r--r-- id_ed25519.pub (644)
# -rw------- authorized_keys (600)
# drwx------ .ssh/ (700)
# 2. 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
# 3. 确认公钥已添加到服务器
ssh devops@host "cat ~/.ssh/authorized_keys" | grep -c "$(cat ~/.ssh/id_ed25519.pub)"
# 输出1表示已添加
# 4. 检查sshd配置是否允许密钥认证
sudo grep PubkeyAuthentication /etc/ssh/sshd_config
# 应该是: PubkeyAuthentication yes
# 某些最小化安装没有sudo
# 解决:用root安装sudo
su -
apt install sudo -y # Debian/Ubuntu
dnf install sudo -y # RHEL/CentOS
# 或者直接编辑sudoers
visudo
# 添加: devops ALL=(ALL:ALL) ALL
掌握Linux系统架构、发行版选择、SSH密钥认证、用户管理、包管理和服务管理——这是DevOps工程师的基石技能。