1. Nginx 简介

Nginx 是一个高性能、轻量级的 HTTP 服务器和反向代理服务器,常用于静态文件服务、负载均衡、反向代理、SSL/TLS 加密等场景。它支持高并发,具有模块化设计和灵活的配置。


2. 通过 Docker-Compose 启动 Nginx

version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/logs:/var/log/nginx:rw
      - ./nginx/cert:/etc/nginx/cert:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:rw
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s

3. Nginx 配置详解

主配置文件(nginx.conf)

# 全局配置
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 日志配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;


    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    # 压缩与缓存
    gzip on;
    gzip_types text/plain application/json;

    # 包含子配置文件
    include /etc/nginx/conf.d/*.conf;
}

子配置文件(conf.d/*.conf)

http {
    server {
        listen 443 ssl;
            server_name _;
    }

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    location / {
        proxy_pass http://backend;
    }
}
# Stream 转发(TCP/UDP)
stream {
    upstream db_backend {
        server db1.example.com:3306;
        server db2.example.com:3306;
    }

    server {
        listen 3306;
        proxy_pass db_backend;
    }
}

常见的HTTP模块配置

# 传递请求头和用户信息
proxy_set_header Host $host;  # 保留原始 Host 请求头
proxy_set_header X-Real-IP $remote_addr;  # 保留客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 保留转发链
proxy_set_header X-Forwarded-Proto $scheme;  # 保留请求协议 (http/https)

# 支持 WebSocket 等长连接
proxy_http_version 1.1;  # 使用 HTTP/1.1 支持长连接
proxy_set_header Upgrade $http_upgrade;  # 支持 WebSocket 升级
proxy_set_header Connection "upgrade";  # 保持长连接

# 配置传递下划线 Header
underscores_in_headers on;  # 允许传递下划线头部

# 增加连接和读写超时 (HTTP CODE 504)
proxy_connect_timeout 120s;  # 设置连接超时
proxy_read_timeout 120s;     # 设置读取超时
proxy_send_timeout 120s;     # 设置发送超时

client_max_body_size 1m;  # 限制客户端请求体最大为 1MB (HTTP CODE 413)

# 增加缓冲区大小
proxy_buffer_size 128k;  # 设置初始缓冲区大小
proxy_buffers 4 256k;  # 设置缓冲区数量和大小
proxy_busy_buffers_size 256k;  # 设置繁忙时的缓冲区大小

动态限流

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
    server {
        location /api/ {
            limit_req zone=api_limit burst=10 nodelay;
            proxy_pass http://backend_service;
        }
    }
}

HTTP301/HTTPS配置示例

server {
    listen       80;
    server_name  _;
    server_tokens off; # 关闭版本信息返回
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;

    # 指定 SSL 证书和密钥路径
    ssl_certificate     /etc/nginx/cert/example.crt;
    ssl_certificate_key /etc/nginx/cert/example.key;

    # SSL 会话和协议配置
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 5m;
    ssl_protocols       TLSv1.2 TLSv1.3;

    # 加密套件和优先级配置
    ssl_ciphers         'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!aNULL:!MD5:!RC4';
    ssl_prefer_server_ciphers on;

    # 启用 HSTS(仅在 HTTPS 完全启用后使用)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}

在 Nginx 配置中,location 块用于定义 URL 路径和请求的匹配规则。以下是一些常见的 location 配置示例,包括重写、正则匹配和静态资源配置。

Location 配置示例

1. 基本重定向配置

# 将所有 http 请求重定向到 https
server {
    listen 80;
    server_name example.com;
    
    location / {
        return 301 https://$host$request_uri;
    }
}

用途:将所有 HTTP 请求重定向到 HTTPS。

2. 静态文件服务配置

server {
    listen 80;
    server_name example.com;

    # 为所有以 /static/ 开头的请求提供静态文件
    location /static/ {
        root /var/www/html;  # 静态文件目录
        try_files $uri $uri/ =404;  # 尝试查找文件,不存在返回 404
    }
}

用途:为特定路径(如 /static/)提供静态资源服务。

3. 正则匹配和动态路由

server {
    listen 80;
    server_name example.com;

    # 匹配以 /user/ 开头且后面跟着数字的请求
    location ~ ^/user/(\d+)$ {
        # 捕获正则匹配的数字并通过变量传递
        set $user_id $1;
        # 转发请求到后端服务器
        proxy_pass http://backend_servers/$user_id;
    }
}

用途:使用正则表达式匹配路径并将捕获的内容传递到后端。比如 /user/123 会被转发到 http://backend_servers/123

4. 禁止访问某些文件类型

server {
    listen 80;
    server_name example.com;

    # 禁止访问 .bak 文件
    location ~* \.bak$ {
        deny all;  # 拒绝所有访问
    }
}

用途:禁止访问特定类型的文件,如 .bak 文件。

5. 静态文件 + 动态请求

server {
    listen 80;
    server_name example.com;

    # 提供静态文件
    location / {
        root /var/www/html;
        try_files $uri $uri/ /index.html;  # 尝试找到文件,找不到时返回 index.html
    }

    # 处理 PHP 请求(假设 Nginx 已配置 PHP-FPM)
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        include fastcgi_params;
    }
}

用途:同时提供静态文件服务和处理动态请求(如 PHP)。

6. 使用正则匹配重写 URL

server {
    listen 80;
    server_name example.com;

    # 将 /product/123 重写为 /product?id=123
    location ~ ^/product/(\d+)$ {
        rewrite ^/product/(\d+)$ /product?id=$1 last;
    }
}

用途:使用正则表达式匹配 URL 并进行重写,将 /product/123 重写为 /product?id=123

7. 使用 try_files 优雅处理 404

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        try_files $uri $uri/ /index.php?$query_string;  # 尝试静态文件,如果不存在则转到 PHP 处理
    }
}

用途try_files 用来优雅地处理文件不存在的情况,如果文件不存在,则转发给 PHP 或其他处理程序。

8. 根据请求类型返回不同响应

server {
    listen 80;
    server_name example.com;

    # 只允许 GET 和 POST 请求
    location /api/ {
        if ($request_method !~ ^(GET|POST)$) {
            return 405;  # 其他方法返回 405 Method Not Allowed
        }
    }
}

用途:根据请求方法返回不同的响应,例如只允许 GETPOST 请求。

9. 缓存配置

server {
    listen 80;
    server_name example.com;

    # 缓存图片文件
    location ~* \.(jpg|jpeg|png|gif|ico)$ {
        expires 30d;  # 设置缓存过期时间为 30 天
        add_header Cache-Control "public";
    }
}

用途:为特定类型的静态文件设置缓存头部,指定缓存时间。

10. 转发到不同的后端

server {
    listen 80;
    server_name example.com;

    # 转发到后端1
    location /api/v1/ {
        proxy_pass http://backend_v1;
    }

    # 转发到后端2
    location /api/v2/ {
        proxy_pass http://backend_v2;
    }
}

用途:根据路径前缀将请求转发到不同的后端服务器。


总结:

  • 静态资源location /static/ {} 用于服务静态文件。
  • 重写规则location ~ ^/old/ { rewrite /new; } 用于 URL 重写。
  • 正则匹配location ~ 用于路径的正则匹配和处理。
  • 请求过滤location /api/ { if ... } 用于限制请求类型或 IP。
  • 反向代理location /api/ { proxy_pass ... } 用于请求转发到后端服务器。

这些配置可以灵活地结合使用,以满足不同的请求路由、重定向、反向代理、缓存等需求。

常见 Linux 命令详细解释

以下是常见 Linux 命令及其参数的详细解释,按照使用频率排序,并附带了使用示例。

1. scp(安全复制)

scp(Secure Copy Protocol)用于在本地和远程主机之间进行加密传输文件。它基于 SSH 协议,因此数据传输过程中是安全的,适合在不安全的网络中传输敏感文件。

语法

scp [选项] 源文件 目标文件

常用选项

  • -r:递归复制整个目录。使用时,源文件应为目录。
  • -P:指定远程主机的端口号(注意是大写 P)。例如,远程主机使用 2222 端口时,使用 -P 2222
  • -i:指定用于身份验证的私钥文件。例如,-i /path/to/private_key
  • -v:启用详细模式,显示 SCP 执行过程的详细信息。
  • -C:启用压缩,在传输大量数据时有助于提高传输效率。
  • -q:启用静默模式,不显示任何输出。
  • -l:限制传输的带宽,单位为 Kbit/s。例如,-l 500 限制带宽为 500 Kbit/s。
  • -B:禁止启用密码验证,强制使用密钥认证。
  • -o:传递 SSH 配置选项,如 -o StrictHostKeyChecking=no 可以跳过 SSH 主机密钥检查。

示例

scp -v -P 2222 -l 500 -i ~/.ssh/id_rsa -r ./myfolder deployer@127.0.0.1:/data

使用 -l 选项限制传输带宽为 500 Kbit/s。

注意事项

  • 权限问题:如果目标路径的权限不足,可以通过 sudo 来提升权限,但是需要确保自己有远程 sudo 权限。
  • 密钥认证:使用 -i 选项时,确保私钥文件的权限是 600,否则 SSH 会拒绝使用该密钥进行连接。

2. sshpass(自动输入密码的 SSH)

sshpass -p "password" ssh -o StrictHostKeyChecking=no root@127.0.0.1 sh /data/custom.sh

使用 sshpass 自动输入密码,登录并执行远程脚本。


3. ssh(连接服务器/开启隧道-端口转发)

常用选项:

  • -L:本地端口转发。
  • -i:指定私钥文件。
ssh -L 0:3307:remote_ip:3306 user@host

通过 SSH 创建本地端口转发。


4. vim(文本编辑器)

vim 是 Linux 系统中功能强大的文本编辑器,广泛用于文件编辑、编程和系统管理。其分为三种模式:

  1. 普通模式:启动后默认进入普通模式,执行导航、删除、复制等操作。
  2. 插入模式:用于文本输入,按 i 进入,按 Esc 退出。
  3. 命令行模式:执行保存、退出、查找替换等命令,按 : 进入。

插入模式

  • i:在当前光标前插入。
  • a:在当前光标后插入。
  • o:在当前行下方新建一行并进入插入模式。

保存和退出

  • :w:保存文件。
  • :q:退出 Vim。
  • :wqZZ:保存并退出。
  • :q!:强制退出(不保存修改)。
  • :x:保存并退出(等价于 :wq)。

文本操作

  1. 复制、粘贴

    • yy:复制当前行。
    • nyy:复制当前行及其后 n 行。
    • p:在光标后粘贴。
    • P:在光标前粘贴。
  2. 删除

    • dd:删除当前行。
    • ndd:删除当前行及其后 n 行。
    • x:删除光标所在的字符。
  3. 撤销和重做

    • u:撤销上一步操作。
    • Ctrl + r:重做上一步撤销。
  4. 查找

    • /pattern:向下查找 pattern
    • ?pattern:向上查找 pattern
    • n:重复上一次查找(同方向)。
    • N:反向重复上一次查找。
  5. 替换

    • :%s/old/new/g:将文件中所有的 old 替换为 new
    • :n,m s/old/new/g:将第 n 到第 m 行的 old 替换为 new
    • :%s/old/new/gc:替换时逐个确认。

窗口操作

  1. 分屏

    • :split:sp:水平分屏。
    • :vsplit:vsp:垂直分屏。
    • Ctrl + w + w:在分屏间切换。
    • Ctrl + w + h/j/k/l:移动到左/下/上/右的窗口。
  2. 关闭窗口

    • :q:关闭当前窗口。
    • :only:关闭其他窗口,保留当前窗口。

代码编辑功能

  1. 缩进

    • >>:将当前行向右缩进。
    • <<:将当前行向左缩进。
    • n>>n<<:缩进当前行及其后 n 行。
  2. 高亮匹配括号

    将光标放在括号上,按 % 可跳转到匹配的括号。

  3. 代码折叠

    • zf:根据选定范围折叠。
    • zo:打开折叠。
    • zc:关闭折叠。

配置文件

Vim 的行为可以通过配置文件 .vimrc 进行定制。以下是一个简单示例:

set number          " 显示行号
syntax on           " 开启语法高亮
set tabstop=4       " 设置制表符宽度为 4 个空格
set expandtab       " 使用空格替代 Tab
set autoindent      " 自动缩进

高级用法

  1. 打开多个文件
vim file1 file2

使用 :n 切换到下一个文件,:prev 切换到上一个文件。

  1. 宏操作

    • q<register>:开始录制宏,<register> 可以是任意字母。
    • 执行一系列操作后,按 q 停止录制。
    • @<register>:执行宏。
    • n@<register>:重复执行宏 n 次。
  2. 多行注释

    • 选中多行:按 Ctrl + v 进入列模式,选择需要注释的行。
    • 插入注释符:按 Shift + i,输入注释符(如 #),然后按 Esc

示例

  1. 替换文件中的字符串
:%s/foo/bar/g

将文件中所有的 foo 替换为 bar

  1. 删除空行
:g/^$/d
  1. 批量修改代码缩进
:%!indent -kr

5. xargs(构建和执行命令行)

xargs 是一个用于构建并执行命令行的工具,通常结合管道使用。它从标准输入中读取数据(如文件列表、参数等),并将其转换为适合命令行的格式,接着执行指定的命令。

xargs [选项] [命令]
  • xargs 会从标准输入中读取数据并将其转化为命令行参数,然后执行指定的命令。

常用选项

  • -n:指定每次执行命令时使用的参数个数。

    例如,xargs -n 2 表示每次使用两个参数来执行命令。

  • -I:指定替换字符串。此选项允许你在命令中指定一个占位符(如 {}),并用输入数据替换该占位符。

    例如,xargs -I {} echo Hello, {} 会将标准输入的每一项替换 {},并执行命令 echo Hello, <item>

  • -d:指定输入分隔符。

    默认情况下,xargs 使用空白字符(空格、制表符、换行符)作为分隔符,使用 -d 可以指定其他字符作为输入分隔符。

  • -p:提示用户在执行每个命令前进行确认。

    例如,xargs -p rm 在执行每个 rm 命令之前都会要求用户确认。

  • -0:与 find 命令结合使用时,使用空字符(而不是换行符)作为分隔符,以正确处理文件名中包含空格和特殊字符的情况。

    例如,find . -name "*.txt" -print0 | xargs -0 rm 用于删除所有 .txt 文件,正确处理文件名中包含空格的情况。

示例

  1. 基本用法

    echo "file1 file2 file3" | xargs rm

    这个命令会删除 file1file2file3 文件。xargs 会将输入的数据(文件名)传递给 rm 命令。

  2. 使用 -n 每次传递指定数量的参数

    echo "file1 file2 file3 file4" | xargs -n 2 rm

    该命令每次将两个文件作为参数传递给 rm 命令,执行 rm file1 file2rm file3 file4

  3. 使用 -I 指定替换字符串

    echo "file1 file2 file3" | xargs -I {} mv {} /path/to/destination/

    该命令将每个文件移动到 /path/to/destination/ 目录中。{} 是占位符,表示每次传递给 mv 命令的文件名。

  4. find 命令结合使用

    find . -name "*.txt" | xargs rm

    find 命令查找当前目录及其子目录下所有 .txt 文件,并将它们传递给 xargs rm 命令进行删除。

  5. 处理包含空格的文件名(使用 -0

    find . -name "*.txt" -print0 | xargs -0 rm

    这个命令使用 -print0-0 选项,确保即使文件名中包含空格或其他特殊字符,xargs 仍能正确处理文件。


6. awk(文本处理工具)

awk 是一种强大的文本处理工具,特别擅长按行、按字段处理文本数据。awk 可以用于筛选、格式化、统计和生成报告等任务。

awk '条件 { 动作 }' 文件
  • 条件:指定处理文本的条件。
  • 动作:当条件满足时执行的操作,通常用于输出、修改或其他文本处理。

常用选项

  • -F:指定输入字段分隔符,默认情况下是空白字符(空格或制表符)。例如,awk -F ',' 用于处理以逗号为分隔符的 CSV 文件。
  • -v:定义变量,例如,awk -v var=value '...' 用于在 awk 脚本中传递外部变量。
  • print:打印指定的内容或字段。
  • NF:表示当前行的字段数。
  • $1, $2, ... $n:表示当前行的第 1、第 2、...、第 n 个字段。

示例

  1. 打印每一行的第一个字段

    echo "apple orange banana" | awk '{print $1}'
  2. 打印文件的第 1 和第 3 个字段

    awk '{print $1, $3}' file.txt
  3. 使用分隔符

    echo "apple,orange,banana" | awk -F ',' '{print $2}'
  4. 筛选满足条件的行

    awk '$2 > 50 {print $1, $2}' file.txt
  5. 计算总和

    awk '{sum += $1} END {print sum}' file.txt

    计算文件中所有第一列的数字之和。


7. grep(文本搜索)

常用选项:

  • -E:启用扩展正则表达式。
  • -r:递归搜索目录。
  • -i:忽略大小写。
  • -v:反向匹配,显示不匹配的行。
  • -l:只显示匹配的文件名。
grep -i "pattern" file.txt

8. sort(排序)

常用选项:

  • -n:按数字排序。
  • -r:逆序排序。
  • -u:去除重复的行。 也可使用uniq
sort -n file.txt

9. comm(比较文件)

用于比较两个排序过的文件,显示它们的共同部分和差异部分。

常用选项:

  • -1:不显示文件 1 中独有的部分。
  • -2:不显示文件 2 中独有的部分。
  • -3:不显示两个文件共有的部分。
comm file1.txt file2.txt

10. tr(字符转换)

常用选项:

  • -d:删除字符。
  • -s:压缩字符。
tr 'a-z' 'A-Z' # 将小写字母转换为大写字母
tr -s '[[:space:]]' '\n' # 根据空白字符分词
#[[:space:]]:一个 POSIX 字符类,匹配所有空白字符(如空格、制表符、换行符等)。

11. tar(打包与压缩)

常用选项:

  • -c:创建一个新的 tar 包。
  • -x:解包。
  • -v:显示处理过程。
  • -f:指定目标文件。
  • -z:通过 gzip 压缩或解压。
  • -j:通过 bzip2 压缩或解压。
tar -cvf 1101_log.tar 1101_log/*
tar -zxvf file.tar.gz

12. gzip(压缩)

gzip 是一个用于压缩单个文件的工具,会删除原始文件并生成 .gz 压缩文件

常用选项:

  • -d:解压文件
  • -r:递归压缩目录中的所有文件(每个文件单独生成 .gz 文件)
  • -v:显示压缩过程
gzip -d /tmp/test.gz

13. zipunzip(压缩和解压 .zip 文件)

zip:用于压缩文件和目录。

zip [选项] 压缩包 文件/目录

常用选项

  • -r:递归压缩
  • -m:不保留原文件
  • -v:显示过程
zip -r /tmp/test.zip /tmp/testdir

unzip:用于解压 .zip 文件。

常用选项**:

  • -d:指定解压目录
  • -v:显示解压过程
unzip /tmp/test.zip -d ./tmp/test

14. split(文件拆分)

用于将大文件拆分为小文件。

语法

split [选项] 文件 前缀

常用选项:

  • -a: 指定生成的小文件后缀的长度,默认为2
  • -b: 指定每个拆分文件的大小。单位可为 b(字节)、k(千字节)、m(兆字节)。
  • -d: 使用数字作为小文件的后缀,而不是字母,默认为字母
  • -l: 指定每个小文件的行数,默认为1000行
  • -n: 指定生成的小文件的数量,默认为2
  • --verbose: 显示拆分过程的详细信息
split -b 35m -d /path/to/bigfile bigfile_

bigfile 拆分为多个 35MB 的文件。


15. nohup(后台运行)**

挂起信号简介

挂起信号(SIGHUP, Signal Hang Up)是当用户注销或关闭终端时,系统发送给与该终端相关进程的信号。默认情况下,进程会因接收到挂起信号而终止。

nohup 命令会忽略挂起信号,使进程在终端关闭后仍然继续运行。

nohup 命令 [参数] &

常用选项

  • &:将命令放入后台运行,配合 nohup 使用。
  • nohup.out:如果未指定输出文件,命令的标准输出和错误输出会默认重定向到 nohup.out 文件中。
nohup python3 script.py > output.log 2>&1 &

16. ps(进程状态)**

ps 命令用于查看当前系统的进程信息,包括正在运行的程序及其状态。

常用选项**:

  • -e:显示所有进程(相当于 ps -A)。
  • -f:显示完整格式的信息,包括 UID、PPID、C、STIME 等。
  • -ef:组合选项,显示所有进程的详细信息。

- `a`:显示与终端相关的所有进程。
- `u`:以用户为中心的格式显示。
ps -u $(whoami) # 查看当前用户的进程
ps -ejH # 查看进程的层级关系(父子关系)

17. kill(终止进程)**

kill 命令用于向指定进程发送信号,常用于终止进程。

kill [选项] 进程ID

常用选项

  • -9(SIGKILL):强制终止进程,不会保存数据或进行清理操作。
  • -15(SIGTERM):默认信号,优雅地终止进程,允许进程进行清理工作后退出。
信号编号信号名称说明
1SIGHUP重新加载进程配置(常用于守护进程)。
2SIGINT中断进程(相当于 Ctrl+C)。
9SIGKILL强制终止进程。
15SIGTERM优雅地终止进程(默认)。
kill -15 1234 # 优雅地终止进程
kill -9 1234 # 发送 `SIGKILL` 信号强制终止进程 ID 为 `1234` 的进程。
ps -ef | grep python | awk '{print $2}' | xargs kill -9 # 查找运行的 Python 进程并强制终止。

18. tcpdump(抓包)

用于网络数据包的捕获和分析。可以使用Wireshark图形化分析抓包文件。

tcpdump [选项] [表达式]

常用选项:

  • -i:指定网络接口。
  • -w:将输出保存到文件。
  • -nn:禁用域名解析。
  • -v:显示详细输出。
  • -s0:捕获完整的数据包。
tcpdump -w tcpdump.pcap -i docker0 # 在 `docker0` 网络接口上抓取数据包,并将其保存到 `tcpdump.pcap` 文件中。
tcpdump -i en0 host 127.0.0.1 -nnv -s0 -c 50 # 捕获到 `127.0.0.1` 主机的 50 个数据包,并显示详细信息。

19. top(实时进程监控)

top 命令用于实时显示系统的进程信息,包括每个进程的 CPU 和内存使用情况,帮助用户了解系统资源的分配情况。

常用选项

  • -u:显示某个用户的进程。
  • -p:监控特定的进程ID。
  • -d:设置更新频率(秒)。
  • -n:指定更新次数。

快捷键操作(在 top 命令运行时,你可以使用以下快捷键操作):

  • P:按 CPU 使用率排序进程。
  • M:按内存使用率排序进程。
  • T:按时间/累计时间排序进程。
  • q:退出 top 命令。
  • h:显示 top 的帮助信息。
  • k:终止(kill)一个进程,输入进程的 PID。
  • r:改变进程的优先级(即调整 nice 值)。
  • u:只显示某个用户的进程。
  • n:设置刷新间隔时间(默认是 3 秒)。
  • c:切换显示命令行或程序名称。

20. uptime(系统运行时间)

uptime 命令显示系统的运行时间、当前时间、登录用户数量以及负载信息,是系统管理员常用的查看系统健康状况的工具。

21. w(查看当前登录用户和系统活动)

w 命令用于显示当前系统登录用户的信息以及他们正在执行的活动。它可以提供有关每个用户的详细信息,如登录时间、正在运行的进程、终端等

22. sync(同步磁盘)

sync 命令用于将文件系统的缓存数据写入磁盘,确保数据的持久性。该命令常用于系统关闭前,或者需要手动同步的场景。
sync; echo 3 > /proc/sys/vm/drop_caches # 同步缓存并清空缓存,包括 swap 空间。

25. du(磁盘使用情况)

du 命令用于显示文件和目录的磁盘使用情况,可以帮助用户查看目录或文件占用的磁盘空间。

du [选项] [文件/目录]

常用选项

  • -h:以易读的格式显示(例如 KB、MB)。
  • -s:显示总计,即只显示目录的总大小。
  • -a:显示所有文件和目录的使用情况。
  • --max-depth=N:只显示到指定深度的目录信息。
du -sh /home/user/
du -ah # 显示当前目录及其所有子目录和文件的磁盘使用情况。
du -h --max-depth=2 /home/user/ # 显示目录的前两级使用情况

26. df(文件系统磁盘空间)

df 命令用于查看文件系统的磁盘空间使用情况,帮助了解磁盘空间的分配与使用情况。

常用选项**:

  • -h:以易读格式显示(例如 KB、MB)。
  • -T:显示文件系统类型。
  • -a:包括所有文件系统(即使它们的使用空间为 0)。
  • -i:显示 inode 的使用情况(文件系统中的索引节点)。
df -hT # 除了显示空间使用情况,还显示文件系统的类型(例如 ext4、xfs)。
df -hi # 显示所有文件系统的 inode 使用情况,帮助判断是否达到 inode 限制。

27. rpm(RPM 包管理器)

用于安装和管理 RPM 包。

常用选项:

  • -i:安装包。
  • -v:显示详细信息。
  • -h:显示安装进度。
rpm -ivh package.rpm # 安装名为 `package.rpm` 的软件包。

28. systemctl(系统控制)

用于管理系统服务。

常用选项:

  • status:查看服务状态。
  • start:启动服务。
  • stop:停止服务。
  • enable:设置服务开机自启动。
  • disable:禁用服务开机自启动。
systemctl start firewalld
systemctl stop firewalld
systemctl enable firewalld
systemctl disable firewalld

29. firewall-cmd(Firewalld 管理)

用于管理 firewalld 防火墙。

常用选项:

  • --get-active-zones:查看当前激活的防火墙区域。
  • --add-port:开放端口。
  • --remove-port:关闭端口。
  • --set-default-zone:设置默认区域。
  • --add-rich-rule:添加高级规则。
firewall-cmd --get-active-zones                           # 查看激活的域
firewall-cmd --get-default-zones                            # 查看默认的域
firewall-cmd --zone=public --list-ports              # 查看开放的端口
firewall-cmd --zone=public --list-rich-rules  # 查看添加的规则
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放 80 端口并设置为永久生效,
firewall-cmd --zone=trusted --remove-port=9201 # 关闭 9201 端口。

30. iptables(防火墙规则管理)

管理 IP 防火墙规则。

常用选项:

  • -I:插入新规则。
  • -D:删除规则。
  • -L:列出当前规则。
  • -p:指定协议。
  • --dport:指定目标端口。
iptables -I INPUT -s 10.150.3.11 -p tcp --dport 9201 -j ACCEPT
iptables -D INPUT -s 10.150.3.11 -p tcp --dport 9201 -j ACCEPT
#  -m multiport --dport 9201,8500,15672

Docker 使用手册

Docker 基础命令

镜像管理

查找镜像

docker search image_name
  • --filter / -f:按条件过滤(如 stars=100)。
  • --limit:限制返回结果数量。

拉取镜像

docker pull image_name:tag
  • --all-tags / -a:拉取镜像的所有标签。

查看本地镜像

docker images
  • --all / -a:列出所有镜像,包括中间层。
  • --digests:显示镜像摘要信息。
  • --filter / -f:按条件过滤。

删除镜像

docker rmi image_name:tag
  • --force / -f:强制删除。
  • docker image prune -a:删除未使用的镜像。

保存与加载镜像

docker save image_name:tag | gzip > image.tar.gz
gunzip -c image.tar.gz | docker load

查看镜像历史

docker history image_name:tag
  • --no-trunc:显示完整信息。
  • --quiet / -q:只显示层 ID。

根据容器提交镜像

docker commit -a "nathan" -m "create new img" <container_id> image_name:tag
  • -a:设置作者信息。
  • -m:描述信息。
  • --change / -c:对镜像进行配置更改。

重命名镜像

docker tag old-repo/myimage:tag new-repo/myimage:new-tag

容器管理

运行容器

docker run -it --entrypoint sh image_name:tag
  • -i:保持标准输入打开。
  • -t:分配伪终端。
  • --name:为容器命名。
  • -d:后台运行。
  • --rm:退出后自动删除。
  • -p:端口映射(如 8080:80)。
  • -v:挂载数据卷(如 /host/path:/container/path)。

查看容器日志

docker logs <container_id>
docker logs --since 10m container_id
  • -f:实时查看日志。
  • --tail:显示最新日志行数(如 100)。
  • --since:从指定时间开始显示日志(支持 10m1h、具体时间戳等)。
  • --until:设置日志显示结束时间。

查看容器状态

docker ps
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
  • -a / --all:列出所有容器。
  • -q:只显示容器 ID。
  • --filter / -f:按条件过滤。
  • --format:以指定格式显示容器信息,可用占位符包括:

    • {{.ID}}:容器 ID
    • {{.Names}}:容器名称
    • {{.Status}}:容器状态
    • {{.Ports}}:容器端口
  • --latest / -l:只显示最近创建的容器。
  • --size / -s:显示容器的文件大小。

删除容器

docker rm $(docker ps -aq)
  • -f / --force:强制删除。
  • -v:同时删除挂载的卷。

停止/启动/重启容器

docker stop/start/restart container_id
  • --time / -t:设置停止超时时间(默认 10 秒)。

检查容器信息

docker inspect container_id
docker inspect --format='{{.State.Running}}' container_id
  • 使用 --format 提取特定信息:

    • {{.State.Status}}:容器状态
    • {{.Config.Image}}:镜像名称

进入容器

docker exec -it container_id /bin/bash

网络管理

查看网络

docker network ls
  • --filter / -f:按条件过滤。

创建网络

docker network create my-network
  • --driver:指定网络驱动类型(如 bridgehost)。
  • --subnet:指定子网(如 192.168.1.0/24)。

指定网络运行容器

docker run --network my-network --name nginx -d nginx

删除网络

docker network rm network_name

查看详细信息

docker network inspect network_name

创建带驱动配置的网络

docker network create \
  --driver bridge \
  --subnet=192.168.1.0/24 \
  custom-network

删除未使用的网络

docker network prune

清理无用资源

清理未使用镜像和容器

docker image prune -a
docker system prune -a
  • -a:删除所有未使用资源。
  • --force / -f:跳过确认提示。

性能监控

查看资源使用情况

docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

查看容器进程

docker top container_id

查看系统事件

docker events

挂载管理

查看数据卷

docker volume ls
  • 列出使用中的数据docker volume ls --filter dangling=false

检查数据卷信息

docker volume inspect <volume_name>

删除数据卷

docker volume rm volume_name

清理未使用的卷

docker volume prune --force

系统信息

查看版本

docker version

查看系统信息

docker info

导出与导入

导出容器

docker export container_id > container.tar

导入容器

cat container.tar | docker import - new_image_name:tag

文件复制

从主机复制到容器

docker cp local_path container_id:container_path

从容器复制到主机

docker cp container_id:container_path local_path

登录与登出

登录 Docker 仓库

docker login
  • --username / -u:指定用户名。
  • --password / -p:指定密码(不推荐明文)。

登出 Docker 仓库

docker logout

Dockerfile 使用指南

1. 常用指令

基础设置

  • FROM:指定基础镜像,通常是第一行。

    FROM ubuntu:20.04
  • LABEL:添加元数据。

    LABEL maintainer="your-email@example.com" version="1.0"

文件与目录操作

  • WORKDIR:设置工作目录。

    WORKDIR /app
  • COPYADD:复制文件到镜像中。

    COPY . /app
    ADD http://example.com/file.tar.gz /app # 支持远程 URL 下载与解压
  • VOLUME:声明挂载点。

    VOLUME ["/data"]

软件安装与命令执行

  • RUN:执行命令安装依赖或配置环境。

    RUN apt-get update && apt-get install -y python3
  • USER:设置后续命令的执行用户。

    USER nonroot

容器启动行为

  • CMD:设置容器启动时的默认命令(可被 docker run 覆盖)。

    CMD ["python3", "app.py"]
  • ENTRYPOINT:设置不可覆盖的默认命令。

    ENTRYPOINT ["python3", "app.py"]
  • EXPOSE:声明容器监听的端口(仅文档作用)。

    EXPOSE 8080

2. 分阶段构建

分阶段构建用于优化镜像大小。以下是示例:

# 构建阶段
FROM node:16 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
  • 构建阶段中安装依赖和生成构建产物。
  • 运行阶段中仅包含运行所需的文件。

3. docker build 命令

docker build 用于根据 Dockerfile 构建镜像。

基本语法

docker build [OPTIONS] PATH

常用选项

  • -t:为镜像命名和标记版本。

    docker build -t myapp:1.0 .
  • -f:指定 Dockerfile 文件路径。

    docker build -f /path/to/Dockerfile .
  • --no-cache:禁用构建缓存,强制执行所有步骤。

    docker build --no-cache -t myapp .
  • --build-arg:传递构建时参数。

    docker build --build-arg VERSION=1.0 -t myapp .
    ARG VERSION
    ENV APP_VERSION=$VERSION
  • -q:仅返回镜像 ID,隐藏构建日志。

    docker build -q -t myapp .
  • --target:指定目标构建阶段,在多阶段构建中,仅构建指定阶段:

    docker build --target builder -t app-builder .
  • 导出缓存将构建缓存保存到目录:

    docker build --cache-to=type=local,dest=./cache .
  • 启用并行构建使用 --progress

    docker build --progress=plain .

示例

  • 构建镜像:

    docker build -t myapp .
  • 带参数构建:

    docker build --build-arg ENV=production -t myapp:prod .

4. 优化建议

  • 多阶段构建:减少最终镜像大小。
  • 缓存利用:将变化较小的命令置于 Dockerfile 顶部。
  • 精简基础镜像:选择 alpine 等轻量级镜像。
  • 合并 RUN 命令:减少镜像层数。

    RUN apt-get update && apt-get install -y python3 && apt-get clean

总结

通过合理使用 Dockerfile 指令及优化构建过程,可以高效生成体积小、性能优的镜像。docker build 提供了丰富的选项以支持复杂需求,结合分阶段构建,可满足不同场景的性能和管理需求。


Docker Compose 使用指南

常用命令

  1. 启动服务

    docker-compose up -d
    • -d:后台运行。
  2. 停止并移除服务

    docker-compose down
    • 默认会移除容器及相关网络,但不会删除卷。
    • 使用 --volumes 删除所有关联卷。
       docker-compose down --volumes
    • 使用 --remove-orphans 删除未定义的容器。

      docker-compose down --remove-orphans
  3. 查看状态

    docker-compose ps
  4. 指定配置文件启动

    docker-compose -f custom-compose.yml up -d
  5. 重启服务

    docker-compose restart
  6. 查看实时日志

    docker-compose logs -f
    • 可指定服务名查看:

      docker-compose logs -f service_name
  7. 清理无用卷

    docker volume prune

docker-compose.yaml 书写规范

结构

  1. 顶层字段

    • version:指定 Compose 文件版本。
    • services:定义服务。
    • volumes:定义数据卷。
    • networks:定义网络。
  2. 缩进:使用两个空格,保持层级清晰。

示例

version: "3.9"

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - webnet

  app:
    build:
      context: ./app
    environment:
      - NODE_ENV=production
    depends_on:
      - db
    networks:
      - appnet

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - appnet

volumes:
  web-data:
  db-data:

networks:
  webnet:
  appnet:

网络配置

  1. 自定义网络

    networks:
      custom-network:
        name: my-custom-network
        driver: bridge
  2. 使用外部网络

    networks:
      existing-network:
        external: true
  3. 子网和网关

    networks:
      custom-network:
        driver: bridge
        ipam:
          config:
            - subnet: 192.168.1.0/24
              gateway: 192.168.1.1

卷配置

  1. 命名卷

    volumes:
      app-data:
  2. 挂载主机目录

    services:
      app:
        volumes:
          - /host/path:/container/path
  3. 驱动与选项

    volumes:
      my-volume:
        driver: local
        driver_opts:
          type: nfs
          o: addr=192.168.1.100,rw
          device: ":/path/to/dir"

Docker Compose 的 build 配置

build 配置支持更多高级功能,例如缓存、构建参数、挂载等。

完整配置示例

services:
  app:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
      args:
        APP_ENV: "production"
      cache_from:
        - app-cache
      target: builder
      network: host
      extra_hosts:
        - "local.test:127.0.0.1"

字段说明

  • context:指定构建上下文目录(通常是包含 Dockerfile 的路径)。
  • dockerfile:自定义 Dockerfile 路径。
  • args:传递构建参数(在 Dockerfile 中使用 ARG 声明)。
  • cache_from:使用指定镜像作为构建缓存源,减少重复构建时间。
  • target:指定构建阶段的目标,仅构建多阶段镜像中的某一阶段。
  • network:设置构建时使用的网络模式(如 host)。
  • extra_hosts:在构建时定义额外的主机解析(类似 /etc/hosts)。

更多高级用法

  1. 挂载构建时的卷(Docker BuildKit 支持)

    • 用于在构建时临时挂载额外数据,例如私有依赖库。

      services:
      app:
        build:
          context: .
          dockerfile: Dockerfile
          secrets:
            - my_secret
      secrets:
      my_secret:
        file: ./secrets.txt
  2. 使用 BuildKit 的缓存挂载

    services:
      app:
        build:
          context: .
          dockerfile: Dockerfile
          cache_from:
            - type=local,src=./cache
          cache_to:
            - type=local,dest=./cache

实用技巧

  1. depends_on 限制

    • 定义依赖关系,但不会保证服务完全启动:

      depends_on:
        - db
  2. 扩展字段
    使用 x- 前缀定义共享配置:

    x-shared-config:
      environment:
        - LOG_LEVEL=debug
    
    services:
      service1:
        <<: *x-shared-config
        image: app1
    
      service2:
        <<: *x-shared-config
        image: app2
  3. 动态扩展配置
    配合环境变量使用:

    services:
      app:
        image: "${APP_IMAGE:-default-app}:latest"

综合示例

以下是一个完整的 Compose 配置文件示例:

version: "3.9"

services:
  frontend:
    image: nginx:alpine
    ports:
      - "8080:80"
    networks:
      - frontend-backend

  backend:
    build:
      context: ./backend
    environment:
      - APP_ENV=production
    depends_on:
      - db
    networks:
      - frontend-backend
      - backend-db

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend-db

volumes:
  db-data:

networks:
  frontend-backend:
  backend-db:

总结

通过合理配置 docker-compose.yaml 文件并利用 Compose 命令,可以轻松管理复杂的容器服务。配合网络和卷配置,能进一步优化服务间的交互与数据持久化。

4. 常用脚本示例

检查容器内文件

#!/bin/bash
if [ -z "$1" ]; then
  echo "请传入要搜索的文件名"
  exit 1
fi
RUNNING_CONTAINERS="$(docker ps --format '{{.Names}}')"
for CONTAINER in $RUNNING_CONTAINERS; do
  if docker exec -it $CONTAINER sh -c 'test -e $1'; then
    echo "Found $1 in container: $CONTAINER"
  fi
done

5. 常见问题与注意事项

  1. 镜像源加速配置
# apk镜像源加速
RUN echo "https://mirrors.aliyun.com/alpine/v3.18/main" > /etc/apk/repositories && \
    echo "https://mirrors.aliyun.com/alpine/v3.18/community" >> /etc/apk/repositories && \
    apk update --allow-untrusted && \
    apk add --allow-untrusted --clean-protected --no-cache bash && \
    rm -rf /var/cache/apk/*
# apt镜像源加速
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && apt-get update
  1. 删除未使用的镜像
comm -23 <(docker images --format "{{.Repository}}:{{.Tag}}" | sort) <(kubectl get pods --all-namespaces -o jsonpath="{..image}" | tr -s '[[:space:]]' '\n' | sort) | grep emotibot | grep -v infra | xargs docker rmi

Mac 应用工具分类整理

本文整理了一系列常用的 Mac 应用程序,按照不同类别进行了分类,并标注了其主要作用及官方网站。


开发工具

应用名称主要作用官方网站
ApifoxAPI 文档管理、接口调试和测试工具Apifox 官网
PostmanAPI 开发与测试Postman 官网
IntelliJ IDEA CEJava IDEIntelliJ IDEA 官网
PyCharm CEPython IDEPyCharm 官网
DBeaver数据库管理工具DBeaver 官网
Sublime Text文本编辑器Sublime Text 官网
TyporaMarkdown 文档编辑器Typora 官网
VS Code轻量级代码编辑器VS Code 官网
Git版本控制工具Git 官网
SoapUIWeb 服务测试工具SoapUI 官网
SourcetreeGit 图形化管理工具Sourcetree 官网
JProfilerJava 性能分析工具JProfiler 官网
ZenTermLite轻量化终端工具无官方网站,基于社区开发。

网络与运维工具

应用名称主要作用官方网站
Docker容器化工具Docker 官网
SecureCRTSSH 远程连接SecureCRT 官网
Wireshark网络抓包工具Wireshark 官网
Apache JMeter性能测试工具JMeter 官网
TunnelblickVPN 客户端Tunnelblick 官网
Tabby终端模拟器Tabby 官网
SwitchHosts快速切换 Hosts 文件SwitchHosts 官网
FinalShellSSH 连接与管理工具FinalShell 官网
XmanagerWindows 系统下的图形化远程桌面管理Xmanager 官网

数据分析工具

应用名称主要作用官方网站
Navicat Premium数据库管理与开发Navicat 官网
Memory Analyzer (MAT)Java 堆分析工具MAT 官网
Offset Explorer 2Kafka 数据流监控Offset Explorer 官网

通信与远程协作

应用名称主要作用官方网站
TeamViewer远程桌面连接工具TeamViewer 官网
Zoom视频会议Zoom 官网
Microsoft Remote Desktop Beta微软远程桌面连接Microsoft 官网
ToDesk远程协作工具ToDesk 官网
Linphone开源 VoIP 通信工具Linphone 官网

浏览器与办公工具

应用名称主要作用官方网站
Google Chrome浏览器Chrome 官网
Microsoft Edge浏览器Edge 官网
Adobe Acrobat ReaderPDF 阅读器Adobe 官网
Microsoft Office办公套件(Word、Excel、PowerPoint)Office 官网
Anaconda Navigator数据科学与 Python 开发环境管理工具Anaconda 官网

文件管理与效率工具

应用名称主要作用官方网站
TransmitFTP 文件传输工具Transmit 官网
ClashX Pro网络代理客户端ClashX 官网
EasyConnect企业 VPN 工具EasyConnect 官网
Cursor提升工作效率的快捷工具Cursor 官网
Quantumult X网络代理与规则配置Quantumult 官网
V2rayU网络代理客户端V2rayU 官网
Maccy剪贴板管理工具Maccy 官网
Snipaste截图小工具(可钉在桌面)Snipaste 官网
uTools高效工具集插件平台uTools 官网
Draw.io绘图与流程图工具Draw.io 官网

说明: 以上分类及应用整理基于实际功能划分,帮助您快速找到所需工具。根据需求选择最适合的应用!

购买服务器后,首先需要配置的是 SSH。频繁登录云供应商平台、输入授权码等操作相当繁琐,因此 SSH 配置能大大简化登录流程。


SSH(Secure Shell)是一种用于安全远程登录和其他网络服务(如安全文件传输)的协议,支持多种登录方式,每种方式都有其优缺点。以下是 SSH 中常见的两种登录方式的分析(此外还有基于证书和双因素认证等其他方式,它们通常提供更高的安全性,但对于个人开发者而言,过于繁琐且成本较高,本文不作讨论):

1. 基于密码的登录

描述

用户通过输入用户名和密码进行身份验证。

优点

  • 简单易用:用户只需记住密码,设置过程相对简单。
  • 广泛支持:几乎所有 SSH 客户端和服务器都支持此方式。

缺点

  • 安全性较低:如果密码被破解(如暴力攻击、社交工程等),攻击者可以轻易获得访问权限。
  • 管理复杂:需要定期更改密码以增强安全性,用户可能会使用弱密码。

2. 基于公钥的登录

描述

使用 SSH 密钥对(公钥和私钥)进行身份验证。用户在服务器上放置公钥,而在本地计算机上保留私钥。

优点

  • 安全性高:密钥对的安全性远高于简单密码,攻击者难以猜测私钥。
  • 便捷性:一旦设置,用户可以在不输入密码的情况下轻松登录。
  • 支持多种认证机制:可以为不同服务器设置不同的密钥。

缺点

  • 初始设置复杂:需要生成密钥对并将公钥传输到服务器。
  • 私钥管理:用户需妥善保管私钥,避免丢失或被盗。

每种 SSH 登录方式都有其独特的优势和不足。通常推荐使用 基于公钥的登录,因为它在安全性和便捷性之间取得了良好的平衡。

1. 如何获取密钥对?

物理机

  1. 使用以下命令生成 SSH 密钥对:

    ssh-keygen -t rsa -b 4096
  2. 将公钥复制到远程服务器:

    ssh-copy-id username@hostname

云服务器

几乎所有云服务供应商都提供了密钥管理功能,支持密钥生成及下载。以下是在腾讯云轻量云服务器上生成密钥的步骤:

  1. 选择产品-轻量云服务。
  2. 在左侧菜单中选择 SSH 密钥,点击创建密钥。
  3. 选择与服务器相同的地域,填写信息以生成 SSH-Key(还可以一键关联至服务器上)。
    tencent-gen-sshkey.png

通过以上操作,可以轻松创建密钥对,使用 ssh-copy-id 或云服务商的一键关联功能将公钥配置到服务器上。请妥善保存好私钥(丢失不可恢复)。

接下来进行以下操作:

2. 修改 SSH 端口

自定义 SSH 端口号不仅可以增加安全性,还能减少自动化攻击的潜在风险。选择一个不常用的端口,可以有效地隐藏 SSH 服务,从而降低被攻击的可能性。

如何修改 SSH 端口:

服务器端的 SSH 配置文件通常位于 /etc/ssh/sshd_config,该文件用于控制服务器端的行为、允许的认证方式和安全策略等。可以通过 Port 指令指定 SSH 的监听端口号,例如:

modify-ssh-port.png

# /etc/ssh/sshd_config

Port 2222

上述配置将 SSH 服务的端口从默认的 22 改为 2222。完成配置后,重启 SSH 服务以应用更改:

sudo systemctl restart sshd

这样,服务器将开始在端口 2222 上监听 SSH 连接。


3. 配置网络防火墙

对于物理服务器,可以配置防火墙以开放相应的 SSH 端口(如 2222)。云服务器则可通过云平台管理网络策略,根据页面配置开放对应的 SSH 端口。例如,腾讯云的配置示例:

tencent-firewall-config.jpg

4. 配置客户端免密登录

注意: 仅建议在个人电脑上配置免密登录。在公共网络或多用户共享的设备上,使用免密登录可能导致严重的安全风险,请谨慎选择。

客户端的配置文件通常位于用户目录下的 .ssh/config 中,用户可以为不同的主机设定各自的 SSH 参数。

客户端配置文件示例:

# ~/.ssh/config
Host myserver
    HostName example.com
    User myuser
    Port 2222
    IdentityFile ~/.ssh/myserver_key
密钥认证:确保私钥文件的权限是 600,否则 SSH 会拒绝使用该密钥进行连接。

通过以上配置,连接服务器时只需执行以下命令,操作便捷且安全(仅限私人电脑):

ssh myserver

常见配置项

  1. Host: 定义服务器的别名,可用 * 通配符配置多个主机。
  2. HostName: 指定服务器的实际地址或域名。
  3. User: 指定默认登录用户名。
  4. Port: 指定连接时使用的端口号。
  5. IdentityFile: 指定用于身份验证的私钥文件路径,可为不同主机指定不同的密钥。

5. 命令行连接

对于不常用或公共环境,建议使用云厂商平台登录,或使用以下临时登录命令:

ssh -p 2222 myuser@example.com -i ~/.ssh/myserver_key

该命令可临时指定端口号和私钥文件,避免修改配置文件,适合短期使用。


通过这些 SSH 配置,您可以显著提高登录过程的效率与安全性。强烈建议定期检查和更新您的安全配置,以应对潜在的威胁。