Tech

A collection of 134 posts

Linux

openssh 公钥转换 RFC 4716 格式

OpenMediaVault 的 WebUI 管理用户时,只接受 RFC 4716 格式的公钥。而使用 ssh-keygen 默认生成的是 openssh 的字符串格式: ~$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEdD64Wz3GLG95pdTskJ4yaZv3+aVC/9+4YrSKqzvDoUGznARGShnQkLnlCFr+DnwwXuXIXRs5CHT+QOIjpGEHK3KgIBfJWhcLAfcjs2hzapn2aVMfPUexbmV6Cjyx3Vs5orJ8/E9YEJ3As13sJoh3zvhgFE9fBI2UoewlJDFPaIFObpZhVVogwaXzfw9lxkdtNGNFTdB7+fnboFW0KM17mb3mo0daqyC+q2NHcXrkeJ7EYePtjBniM+cP7y5EBeWB6eoyOqLTzoHBL1dbZfJUcecTwsFBkiid0hCosBndDjcZOjKpmiuCCSRGMcU5OTr7wzhxkVhz herald@herald-ThinkPad-T470s 转换格式: ~$ ssh-keygen -e -f .ssh/id_rsa.pub ---- BEGIN SSH2 PUBLIC KEY

OSS

s3fs-fuse 把 s3-like 对象存储挂载到本地

s3fs-fuse 是一个采用 c++ 开发的开源应用,它的作用是可以将 AWS S3 以及兼容 S3 API 的第三方对象存储像普通文件系统一样挂载到本地计算机,由于这种功能通过 FUSE 实现,因此只能在 Linux 和 MacOS 上使用。 安装 包管理器安装 Debian 9 和 Ubuntu 16.04 及以上版本: $ sudo apt install s3fs 发行版软件仓库中可能提供的不是最新版本 编译安装 如果希望使用最新版本,可以自己编译。 安装编译工具和依赖 $ sudo apt-get install automake autotools-dev fuse g+

S3

s3cmd with s3-compatible OSS

S3cmd 是一款免费的命令行工具和客户端,用来上传、下载和管理亚马逊 S3 对象存储以及其他兼容 S3 协议的对象存储(例如 Google Cloud Storage、DreamHost DreamObjects)上的数据。 由于它是命令行下的程序,因此更适合对命令行比较熟悉的用户使用。结合 cron 计划任务,s3cmd 也是理想的自动化备份数据到 s3 的脚本方案。 S3cmd 用 Python 语言写成,采用 GNU Public License v2 (GPLv2) 协议开源,商业和个人均可免费使用。 安装 s3cmd 使用 pip 是最理想的安装方式: $ pip install s3cmd

Python

Pyenv - Python 版本管理工具

pyenv 能够同时管理多个 Python 版本,一键切换默认版本,Pyenv 是 rbenv 和 ruby-build 分支的 Python 实现。 举例 Ubuntu Server 16.04 LTS 环境下的安装和使用 安装 2019-01-04 更新 pyenv-installer 是项目官方新发布的 pyenv 安装脚本,一条命令就可以完成各项设置。 Install: $ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash Update: $ pyenv update

Ghost

Ghost 2.0 Using S3 custom storage module

GetNAS 网站已经从 Wordpress 迁移到 Ghost 2.x,决定将图片等资源迁移到对象存储,涉及到配置 custom storage module。 支持对象存储的模块有很多,我最终选择了 ghost-storage-adapter-s3 模块。 进入容器 由于网站是跑在 Docker 容器里,所以需要先进入容器。 $ docker exec -it getnas /bin/bash 安装 ghost-storage-adapter-s3 在 Ghost 根目录(/var/lib/ghost)使用 npm 安装模块: /var/lib/ghost $ npm install ghost-storage-adapter-s3

Python

Backblaze B2 Bucket 文件和容量统计

Backblaze B2 是眼下性价比最高的对象存储,结合 restic 加密备份工具,就可以非常低成本的实现数据安全冗余。 只是 B2 存储的 API 真是不够实在,除了常规的文件查看、上传和下载等基本操作以外,没有提供任何消费查询和用量统计的接口。 不提供就不提供吧,只要有列出文件的接口,并且能返回每个文件的尺寸信息就够了,起码可以自己累加计算。只是这样要多次发送请求才能得到最终的结果,真不节能。 import requests import base64 import json def b2_auth(): # 身份认证,获取认证 Token。属于 Class C 请求。 # 密钥格式 "keyId:applicationKey". id_and_

Python

Python 读取照片拍摄时间信息

之前的笔记 Python 照片批量重命名 记录了使用 exifread 包读取照片 EXIF 信息以及批量重命名文件的脚本。实际使用下来发现很多照片的拍摄日期信息无法获取。 看到很多人介绍使用 PIL,但看到项目主页最版新只支持到 Python 2.6,后来才发现已经有人创建了新分支 Pillow,实测支持 Python 3.7.0。这个库功能非常丰富,可以对照片做非常专业的处理,读取 EXIF 信息确实有些杀鸡用牛刀,但它实在简单好用。 安装 Pillow $ pipenv install pillow 批处理脚本 import os from PIL import Image import hachoir.parser import

Debian

Debian 网卡启动后执行脚本

正常情况下 /etc/network/if-up.d 中的脚本都会在网卡设备启动后执行,因此只要把脚本扔进去即可。 比如我在 /home/dietpi 目录下有一个 python 脚本 ipfiner.py,如果需要在网卡设备启动时执行它,可以创建文件 /etc/network/if-up.d/ipfinder: #!/bin/bash sudo -u dietpi python3 /home/dietpi/ipfinder.py 提示:使用 sudo -u 可以指定执行脚本的用户身份。

Flask

Flask-User v1.0 自定义 UserManager

Flask-User 用户注册表单的默认密码验证规则为:长度不小于 6 位,必须包含大写和小写字母。在 v0.6 版本时,可以直接通过实例化 UserManager 类时传入自定义方法重写规则。 db_adapter = SQLAlchemyAdapter(db, User) user_manager = UserManager( db_adapter, app, password_validator=password_length, user_profile_view_function=user_profile) v1.0 以后版本则需要通过创建 CustomUserManager(UserManager) 自定义类重写规则。 # 通过自定义类重写 UserManager 中的方法 class

Python

Pypi 使用国内镜像 for pip

回老家避暑,小镇的电信宽带严重限制上行速度,网络不定时抽风。基本没法正常使用 pipenv 管理开发环境,尝试更换国内的 Pypi 镜像服务器,问题解决。 以清华大学镜像站为例 方式一 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 注意:simple 不能少, 协议是 https 不是 http。 方式二 设为默认 修改 ~/.config/pip/pip.conf (Linux), %APPDATA%\pip\pip.ini (Windows

You've successfully subscribed to Herald's Tech Notes!