首页
统计
留言
Search
1
Konsole 和 oh-my-zsh 的配置与使用
2,041 阅读
2
wsl2使用windows下v2ray的代理
1,511 阅读
3
docker启动报错
1,054 阅读
4
ubuntu有些软件无法使用搜狗输入法
936 阅读
5
Kubuntu 配置多桌面快捷键
775 阅读
全部
PHP
Linux
软路由
杂项
Sql
Go
登录
Search
标签搜索
kubuntu
docker
mysql
pgsql
git
csv
shell
wine
linux
oh-my-zsh
wps
gost
起名
redis
ip
crontab
mac
nginx
wss
docker-compose
JyPony
累计撰写
57
篇文章
累计收到
21
条评论
首页
栏目
全部
PHP
Linux
软路由
杂项
Sql
Go
页面
统计
留言
搜索到
57
篇与
的结果
2026-07-28
Ubuntu SSH 密钥登录免密 Sudo 与密码登录有密 Sudo 配置教程
Ubuntu 服务器初始化安全加固与免密 Sudo 配置教程本教程包含 Ubuntu 服务器的完整安全加固流程:创建新用户、配置 SSH 密钥登录、禁用 Root 直接登录、修改 SSH 默认端口,并最终实现:通过 SSH 密钥登录的用户免密 sudo,而通过密码登录的用户必须输入密码。🛠️ 整体配置原理基础加固:弃用默认的 root 账户与 22 端口,改用高权限普通用户与自定义端口,阻断 99% 的自动化暴力破解。免密分流:利用 Linux 的 PAM (Pluggable Authentication Modules) 机制与 SSH 的 ExposeAuthInfo 特性。密钥登录成功后会在内存中生成认证标记文件,sudo 检测到标记则自动放行;密码登录无标记,则强制要求输入密码。📂 第一部分:用户创建与密钥配置💡 本部分操作假设你当前以 root 身份登录在服务器上。1. 创建新用户并赋予基础 Sudo 权限创建一个你自己的高权限账户(将 myuser 替换为你想要的用户名):# 创建用户并根据提示设置密码 adduser myuser # 将用户加入 sudo 组 usermod -aG sudo myuser2. 在本地电脑生成并配置 SSH 密钥请在你的本地电脑(客户端)终端中执行以下操作:生成高强度的 Ed25519 密钥对(一路回车即可,无需设置 key 密码):ssh-keygen -t ed25519 -f ~/.ssh/id_ubuntu_server将公钥上传至服务器的新用户下(将 myuser 和 server_ip 替换为实际值):ssh-copy-id -i ~/.ssh/id_ubuntu_server.pub myuser@server_ip测试能否用密钥成功登录(此时仍需默认 22 端口):ssh -i ~/.ssh/id_ubuntu_server myuser@server_ip确认成功登录后,再继续后续步骤。📂 第二部分:安全加固(修改端口与禁用 Root)⚠️ 重要提示:如果服务器开启了防火墙(如 ufw)或云服务商的安全组,必须先放行新端口(例如 2222),否则修改后将无法连接!sudo ufw allow 2222/tcp1. 修改 SSH 服务配置文件在服务器上打开 SSH 配置文件:sudo nano /etc/ssh/sshd_config在文件中修改或添加以下核心配置(部分配置可能已被注释,请取消 # 并修改):# 1. 修改默认端口(建议选择 1024-65535 之间的随机端口,例如 2222) Port 2222 # 2. 禁用 root 用户直接登录 PermitRootLogin no # 3. 确保开启密码登录(用于测试对照组,后期若追求极致安全可改为 no) PasswordAuthentication yes # 4. 开启 PAM 模块与认证信息传递(免密 sudo 的核心前提) UsePAM yes ExposeAuthInfo yes2. 重启 SSH 服务sudo systemctl restart ssh注意:此时不要断开当前的连接窗口!📂 第三部分:配置免密 Sudo 分流1. 修改 PAM 模块识别密钥打开 sudo 的 PAM 配置文件:sudo nano /etc/pam.d/sudo在文件的最顶端(第一行非注释行之前),添加以下核心配置:auth [success=done default=ignore] pam_exec.so quiet /usr/bin/test -e /run/user/\$PAM_USER/ssh-auth-info说明:此规则会检查是否存在密钥认证标记。若存在则直接放行 sudo;若不存在则交由后续的密码认证模块处理。保存并退出(Ctrl + O 回车,Ctrl + X)。2. 检查 sudoers 权限规则必须确保用户在 sudoers 中使用标准权限(有密),绝对不能配置 NOPASSWD。打开安全编辑器:sudo visudo检查文件末尾。如果你之前针对该用户写过带有 NOPASSWD 的规则,请将其删除。只需保持默认的 %sudo ALL=(ALL:ALL) ALL 即可。保存并退出。🧪 第四部分:完整验证与测试⚠️ 在测试完成前,千万不要关闭当前已经连上的 SSH 窗口! 请开新的本地终端窗口分别进行以下测试。验证 1:测试新端口与密钥登录(预期:免密 Sudo)在本地电脑通过新端口和密钥登录:ssh -p 2222 -i ~/.ssh/id_ubuntu_server myuser@server_ip登录后执行切换 root 命令:sudo su正确现象:直接进入 root 状态,不提示输入密码。验证 2:测试密码登录(预期:有密 Sudo)在本地电脑强制使用密码和新端口登录:ssh -p 2222 -o PubkeyAuthentication=no myuser@server_ip登录后执行切换 root 命令:sudo su正确现象:终端提示 [sudo] password for myuser:,必须正确输入密码才能切换。验证 3:测试 Root 阻断(预期:拒绝登录)尝试直接以 root 身份登录:ssh -p 2222 root@server_ip正确现象:终端直接返回 Permission denied,证明 root 已被成功保护。⚠️ 常见问题排查 (Troubleshooting)修改端口后连不上了?90% 的原因是因为云厂商控制台的“安全组/防火墙”没有开放你修改的新端口(如 2222)。请前往云面板添加放行规则。密钥登录的用户依然提示输入密码?请确认 /etc/pam.d/sudo 中的新增行是否写在了文件的绝对第一行。如果写在后面,会被前面的密码模块提前拦截。
2026年07月28日
30 阅读
0 评论
0 点赞
2026-07-20
PostgreSQL 导入数据后自增主键冲突(Unique violation)修复指南
PostgreSQL 导入数据后自增主键冲突(Unique violation)修复指南🛑 问题现象从线上环境备份并导入到新环境或本地后,在执行 INSERT 插入新数据时,系统抛出类似以下错误:ERROR: duplicate key value violates unique constraint "xxxx_pkey"DETAIL: Key (id)=(1) already exists.🔍 核心原因这是因为 PostgreSQL 的自增序列(Sequence)断档导致的。导入行为:在导入线上数据时,SQL 脚本中通常包含明确的 id 值(例如已存在 id 为 1 到 100 的数据)。序列未同步:数据虽然成功写入,但 PostgreSQL 内部控制自增计数的计数器(Sequence)并没有随之递增,依旧停留在初始值(通常是 1)。主键冲突:当新环境发生不带 id 的插入操作时,Postgres 尝试分配 id=1,从而与表中已有的 id=1 数据发生冲突,触发唯一约束异常。🛠️ 批量修复方案(推荐)既然全库有多个表都出现了该问题,可以通过以下两步走策略,一次性自动生成并运行全库的修复脚本。第一步:生成全库修复 SQL请在你的数据库管理工具(如 Navicat、DataGrip、pgAdmin 或 psql 终端)中,运行以下查询语句。它会自动扫描 public 模式下所有使用了自增序列的表,并拼接好重置命令:SELECT 'SELECT setval(' || quote_literal(pg_get_serial_sequence(table_name, column_name)) || ', COALESCE(MAX(' || quote_ident(column_name) || '), 0) + 1, false) FROM ' || quote_ident(table_name) || ';' AS fix_sequence_sql FROM information_schema.columns WHERE table_schema = 'public' AND column_default LIKE 'nextval%';第二步:执行生成的修复脚本运行完上一步的 SQL 后,你会获得一组查询结果(每一行都是一条独立的 SELECT setval(...) 语句)。全选并复制这些结果行。在数据库工具中新建一个 SQL 窗口,将复制的内容粘贴并全部执行。📝 附:单表手动修复命令如果你只想临时快速修复某一个特定的表(例如 product_collection_tasks),可以直接运行以下命令:SELECT setval( pg_get_serial_sequence('product_collection_tasks', 'id'), COALESCE(MAX(id), 0) + 1, false ) FROM product_collection_tasks;💡 建议:为了避免以后频繁出现此问题,在线上导出数据时,如果是使用 pg_dump,建议检查是否开启了完整序列状态导出的相关参数。
2026年07月20日
30 阅读
0 评论
0 点赞
2026-03-31
FlClash 指定 OpenAI / Codex 域名走新加坡代理
FlClash 指定 OpenAI / Codex 域名走新加坡代理推荐实现方式(最简单稳定)使用 覆写(Override) + 自定义规则,或直接修改配置文件添加规则(Rules)。FlClash 支持规则模式下的自定义分流。通过 FlClash 界面覆写打开 FlClash → 工具(或 设置)→ 覆写(Override)。在 网络 或 规则 相关选项中,找到并添加自定义规则(部分版本支持直接编辑规则列表)。添加以下规则(优先级较高,建议放在规则列表最前面):DOMAIN-SUFFIX,openai.com,🇸🇬 新加坡DOMAIN-SUFFIX,codex.openai.com,🇸🇬 新加坡DOMAIN-KEYWORD,codex,🇸🇬 新加坡DOMAIN-SUFFIX,openai.org,🇸🇬 新加坡(如果需要)DOMAIN-SUFFIX,chat.openai.com,🇸🇬 新加坡DOMAIN-SUFFIX,api.openai.com,🇸🇬 新加坡说明:将 🇸🇬 新加坡 替换为你配置文件中实际的新加坡节点组名称(例如 新加坡、SG、🇸🇬 Singapore 等)。如果界面支持“排除域名”或“指定代理”功能,也可以反向操作:全局默认走香港本地或直连,再强制这些域名走新加坡代理。保存覆写配置后,重启代理或更新配置使其生效。将出站模式切换为 规则(Rule)模式。注意事项订阅更新可能会覆盖部分覆写,建议优先使用方法二(编辑配置文件)来固定规则。添加规则后,建议打开 FlClash 的连接日志,访问 chat.openai.com 或使用 Codex 时,确认流量是否正确走新加坡节点。DOMAIN-SUFFIX 是最推荐的规则类型,能有效覆盖 openai.com 的所有子域名,且误伤率低。
2026年03月31日
285 阅读
1 评论
0 点赞
2026-02-04
vsode 配置
先更新源sudo apt update安装最新版 VS Code(Microsoft 官方源)wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list rm -f packages.microsoft.gpg然后安装sudo apt update sudo apt install code安装 JetBrains Mono字体官方最简单的一键脚本(适用于 Linux):/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/install_manual.sh)"检查是否安装fc-list | grep -i "JetBrains Mono"配置字体settings.json 推荐加这些(Ctrl+, 打开设置 → 右上角打开 JSON):{ "editor.fontSize": 16, "workbench.colorTheme": "PhpStorm Dark Islands", "editor.fontFamily": "'JetBrains Mono', Consolas, 'Courier New', monospace", "editor.fontLigatures": true, "window.zoomLevel": 1, }安装扩展按 Ctrl+Shift+X 打开扩展面板 → 搜上面名字 → Install。Chinese (Simplified) Laravel PHP Intelephense PhpStorm Dark Theme JetBrains IDE Keymap
2026年02月04日
51 阅读
0 评论
0 点赞
2025-12-19
pgsql 用一个csv文件的数据,去表中查询结果并导出
1. 创建临时表CREATE TEMP TABLE tmp_uids (user_id BIGINT PRIMARY KEY);2. 把csv数据导入到临时表中\copy tmp_uids FROM '/tmp/uids_goods_20251215.csv' CSV;3. 生成数据(去重)到/tmp/result_goods_ids.csv\copy (SELECT DISTINCT b.goods_id FROM tmp_uids t JOIN public.goods b ON b.user_id = t.user_id AND b.goods_id != 0 ORDER BY b.goods_id) TO '/tmp/result_goods_ids.csv' WITH (FORMAT CSV, HEADER FALSE, ENCODING 'UTF8');4. 生成数据(不去重)到/tmp/result_goods_ids.csv\copy (SELECT b.goods_id FROM tmp_uids t JOIN public.goods b ON b.user_id = t.user_id AND b.goods_id != 0 ORDER BY b.goods_id) TO '/tmp/result_goods_ids.csv' WITH (FORMAT CSV, HEADER FALSE, ENCODING 'UTF8');5. 删除临时表DROP TABLE IF EXISTS tmp_uids;
2025年12月19日
69 阅读
0 评论
0 点赞
1
2
...
12