Lazy loaded image
TrueNAS SCALE 系统管理
Words 1832Read Time 5 min
2025-9-29
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
  • 参考资料
  • TrueNAS ****Core 基于 freebsd, TrueNAS Scale 基于 debian
  • 版本更新后,/etc 路径的内容会重置
TrueNAS 配置 SSH 连接
  • (侧边栏)系统设置→服务,运行 SSH 服务并勾选自启
  • 编辑 SSH 服务设置
    • 根据需要修改 SSH 端口和是否允许密码登录
    • 禁用密钥后仅能通过绑定了 SSH 密钥的账户通过密钥直接登录
  • 创建用于 SSH 登录的用户并授予 SSH 公钥
    • 如果设置了用于远程管理的 admin 用户,可以直接为 admin 账户设置密钥
      • 如果没有则需要手动创建,用户名随意,主用户组选择 admin,附加组选择 builtin_administrators
      • (可选)根据需要勾选是否允许使用 sudo 命令
    • 在账户设置-认证方式里面通过上传公钥文件或粘贴公钥文本的方式添加密钥
midctl 通过 API 管理 Truenas
  • /api/docs/current/ 可以查看 API 文档
  • api 日志
    • /var/log/middlewared.log
TrueNAS 设置通知(以 Gmail SMTP 为例)
  • (侧边栏)用户凭证→本地用户,编辑 admin 用户或 root 用户配置电子邮件地址
    • 后续的通知邮件会发送到当前管理账户的对应地址
为用于发送通知邮件的 Gmail 地址对应 google 账号启用二步验证和设置应用密码
  • 可能在安全页面看不到应用密码的设置页面,需要在上面检索栏检索才能搜到
  • 记录生成的应用密码,后续需要用到该密码
右上方点击铃铛打开警报信息→点击齿轮再点击电子邮件进行配置
  • 发送方式选择 SMTP
    • 发件地址填写你的 Gmail 地址
      • 如果发件人地址邮件与后续验证用户名不同可能会被标记为垃圾邮件
    • 发件人名称可以随便填
    • 邮件发送服务器填写 smtp.gmail.com
    • 端口填写 587 端口
    • 选择使用 TLS 加密
    • 勾选 SMTP 认证
      • 用户名填写你的 Gmail 地址
      • 密码填写此前生成的应用密码
  • 发送方式选择 Gmail OAuth
    • 授权认证即可
TrueNAS 设置通知(以 Telegram 为例)
Telegram 创建机器人并获取 API 令牌和 chat id
  • 检索 BotFather 账号并与其建立沟通
    • 输入指令 /newbot 开始创建机器人账号,等其回复后随后输入机器人名称
      • 必须以 bot 结尾,如果名字已被使用或无效需要尝试直到创建成功
    • 创建成功后可以获得对应机器人 API 令牌,复制并保存等待后续使用
      • 令牌格式为 <数字>:<数字字母符号的混合>
    • 点击 t.me/<botname> 链接与机器人建立沟通,并在浏览器上打开 getUpdates 链接
      • 链接格式: https://api.telegram.org/bot<API-Token>/getUpdates
        • API-Token 为刚才获得的 API 令牌
      • 输入指令 /start 后随便给机器人发送一些信息,刷新 getUpdates API 链接查看是否收到对应信息更新
        • 如果没收到可以多发几次,直至收到信息
      • 机器人收到信息后链接会更新对应信息内容,查找其中 chat 项下的 id,复制并保存等待后续使用
  • (侧边栏)系统设置→警报设置,添加 Alert Services
    • 类型选择 Telegram,填写之前保存的 API 令牌和 chat id
TrueNAS 通过命令关闭 HTTPS 重定向
  • chrome 浏览器由于 HSTS(HTTP Strict Transport Security)机制也会自动重定向 HTTPS
    • 地址栏输入 chrome://net-internals/#hsts 并跳转
    • 在 Delete domain security policies 输入根域名(不带子域名)并点击 delete 按钮
  • 关闭 HTTPS 重定向
    • midclt call system.general.update '{"ui_httpsredirect": false}'
    • midclt call system.general.update '{"ui_port": 80}'
      • 启用 80 HTTP 端口,如无
    • midclt call system.general.config | jq
      • 查看当前配置
    • 然后重启相关服务
      • service nginx restart
      • service middlewared restart
TrueNAS 安装 step-ca ssl 证书及设置定时任务续签证书
证书存放位置
  • /etc/certificates
  • /var/local/ca-certificates
    • 添加到信任库时会复制一份到 /usr/local/share/ca-certificates/cert-<填入的证书名称>.crt
    • /usr/local/share/ca-certificates 链接到 /var/local/ca-certificates
    • /etc/ssl/certs/<certname>.pem 链接到 /usr/local/share/ca-certificates/<certname>.crt 对应文件
      • <certname>cert-<填入的证书名称>
  • /root/stepca-certificates
    • 放置 step 自签证书位置
    • mkdir -p /root/stepca-certificates
下载安装 step-cli
  • curl -LO https://dl.smallstep.com/cli/docs-ca-install/latest/step_linux_amd64.tar.gz
  • tar -xf step_linux_amd64.tar.gz
  • echo "alias step='~/step_linux_amd64/bin/step'" >> ~/.zshrc
    • 假设 shell 是 zsh
    • 因为 /usr/bin 只读,添加到 shell
向 step-ca 申请证书 example.com.crt
  • step ca bootstrap --ca-url https://<ca-host>:<ca-port> --fingerprint <CA_FINGERPRINT> --install
    • 安装 CA 根证书到信任库
  • mkdir -p /root/stepca-certificates && cd /root/stepca-certificates
  • step ca certificate example.com example.com.crt example.com.key
  • step certificate inspect example.com.crt
    • 查看证书是否正常
通过命令行更新证书
  • midclt call certificate.create "{ \"name\": \"$(date +%Y%m%d-%H%M%S)\", \"certificate\": \"$(sed ':a;N;$!ba;s/\n/\\n/g' /root/stepca-certificates/example.com.crt | tr -d '\r')\", \"privatekey\": \"$(sed ':a;N;$!ba;s/\n/\\n/g' /root/stepca-certificates/example.com.key | tr -d '\r')\", \"create_type\": \"CERTIFICATE_CREATE_IMPORTED\" }"
    • 导入刚申请的证书,获取 ID
  • midclt call system.general.update "{\"ui_certificate\": $(midclt call certificate.query | jq 'sort_by(.id) | last | .id')}"
    • 替换 ui 证书为刚才导入的证书 ID 并重启 UI
  • 更新证书并重启 nginx 服务
    • sed -i "s|ssl_certificate\s*\"[^\"]*\";|ssl_certificate $(midclt call certificate.query | jq 'sort_by(.id) | last | .certificate_path');|" /etc/nginx/nginx.conf
    • sed -i "s|ssl_certificate_key\s*\"[^\"]*\";|ssl_certificate_key $(midclt call certificate.query | jq 'sort_by(.id) | last | .privatekey_path');|" /etc/nginx/nginx.conf
    • service nginx restart
  • 可选,删除最早导入的首个证书
    • midclt call certificate.delete $(midclt call certificate.query | jq 'sort_by(.id) | first | .id')
(可选)step-ca 签发后 GUI 手动上传证书
  • (侧边栏)用户凭证→证书→(证书)添加
    • 名称随意,类型选导入证书,勾选添加到信任库,点击下一步
      • 证书和私钥将以输入的名称命名
      • 添加到信任库时会复制一份到 /usr/local/share/ca-certificates/cert-<填入的证书名称>.crt
    • 记事本打开要导入的 crt 及 key 文件,复制粘贴内容到证书和私钥栏,点击下一步
    • 保存
  • (侧边栏)系统→常规配置→(GUI)设置
    • GUI SSL证书勾选刚才填入的证书名称
    • 点击保存
定期续签证书
续签证书并重启需要证书的对应服务
  • nano /root/scripts/renew.truenas.sh
    • nano /root/scripts/after.renew.truenas.sh
      • 根据需要添加服务
      • 部分应用可能需要重启中间件
        • service middlewared restart
    • chmod +x /root/scripts/renew.truenas.sh /root/scripts/after.renew.truenas.sh
    • 通过命令行创建定期续签证书的定时任务
      • 根据自身情况自行修改执行时间和输出
        • \"stdout\": true 为隐藏对应标准输出,否则会发送到对应账户的 cron
      • midclt call cronjob.create "{ \"enabled\": true, \"schedule\": { \"minute\": \"42\", \"hour\": \"*\", \"dom\": \"*\", \"month\": \"*\", \"dow\": \"*\" }, \"command\": \"bash /root/scripts/renew.truenas.sh\", \"description\": \"Renew truenas certificates\", \"user\": \"root\", \"stderr\": false, \"stdout\": true }"
    Truenas 通过 docker 或 k3s 直接管理应用
    • docker
      • docker ps
      • docker exec -it <container_id> /bin/sh
    • k3s
      • k3s kubectl get pods --all-namespaces
      • k3s kubectl config set-context --current --namespace=<NAMESPACE>
      • k3s kubectl exec --stdin --tty <POD_NAME> /bin/sh
    上一篇
    k8s traefik TCP 负载均衡
    下一篇
    NotionNext 博客运营

    Comments
    Loading...