配置 gpg-agent 作为 ssh Authentication 简要笔记(macOS / Windows)

最近花时间学习了一下 openPGP 的知识,虽然目前并没有什么实际需求 要用到这么强的 加密/签名/验证 之类的功能,大概只是闲的,完全出于好奇。
倒也学到了一点有用的,可以用 gpg-agent 来做 ssh Authentication 这样连接远程服务器时 安全性和易用性都更好。
大概整理一个笔记,记录一下配置 macOS(GPG Suite)和 Windows 11(gpg4win)的过程,以防时间长我自己也忘记了,要配置新机器时又得重新去查资料。

●●● 基本思路
假设你已经大概知道 openPGP 这些基础信息,并且已经生成了 openPGP private key 以及 Subkeys 我就跳过这部分了,如果不清楚的建议先搜索一下吧,我这里只用到 Subkey [A] 通过 gpg-agent 作为 ssh Authentication 让系统 ssh 及第三方 ssh 客户端统一走 gpg-agent

●●● 准备工作
导出为 ssh 公钥并上传至远程服务器:
gpg –export-ssh-key YOURKEY_ID > authorized_keys
将文件上传到远程主机的 ~/.ssh/authorized_keys
修改 /etc/ssh/sshd_config 启用 PubkeyAuthentication
然后重启 sshd 服务,详细步骤如果不清楚 请搜索一下吧,配置错误会把自己关在外面

●● macOS 配置步骤(GPG Suite)

●启用 gpg-agent 的 ssh 支持
编辑配置文件,如果不存在配置文件,可手动创建:
nano ~/.gnupg/gpg-agent.conf
添加以下内容:
enable-ssh-support
pinentry-program /usr/local/MacGPG2/libexec/pinentry-mac.app/Contents/MacOS/pinentry-mac

● 重启 gpg-agent
gpgconf –kill gpg-agent
gpgconf –launch gpg-agent
确认进程是否存在:
ps aux | grep gpg-agent

● 配置 SSH_AUTH_SOCK 环境变量 以 zsh 为例
nano ~/.zshrc
加入:
export SSH_AUTH_SOCK=”$(gpgconf –list-dirs agent-ssh-socket)”
加载配置:
source ~/.zshrc
验证以下两个命令输出应一致:
gpgconf –list-dirs agent-ssh-socket
echo $SSH_AUTH_SOCK
正常情况下路径类似:
/Users/yourname/.gnupg/S.gpg-agent.ssh

● 将 Subkey 的 keygrip 写入 sshcontrol
获取 keygrip:
gpg -K –with-keygrip
编辑控制文件:
nano ~/.gnupg/sshcontrol
将对应用于 Authentication 的 Subkey keygrip 添加上去。

● 再次重启 gpg-agent
gpgconf –kill gpg-agent
gpgconf –launch gpg-agent
验证 SSH Agent 状态
ssh-add -L
正常情况下会看到类似输出:
ssh-ed25519 AAAA**** (none)

● 测试 ssh 登录
ssh -p 23456 user@your.domain.com
首次连接会弹出 GPG 的 Pinentry 窗口,输入对应的 passphrase。
可以选择将凭证保存到 macOS Keychain,避免每次重复输入。

● 其他 ssh 客户端(macOS)
调用系统原生 ssh 的程序无需额外配置。
Tabby 需要使用 ssh-auth-socket 插件,并手动指定路径:
~/.gnupg/S.gpg-agent.ssh

●● Windows 11 配置(gpg4win)
整体流程与 macOS 基本一致,主要区别在于 ssh agent 的通信方式。

● gpg-agent 配置
编辑配置文件,如果不存在配置文件,可手动创建:
%APPDATA%\gnupg\gpg-agent.conf
添加:
enable-ssh-support
enable-win32-openssh-support
## 其中 enable-win32-openssh-support 用于兼容 Windows 的 Named Pipe 机制。

● 配置 sshcontrol 重启 gpg-agent
获取 keygrip 写入 %APPDATA%\gnupg\sshcontrol
步骤和 macOS 完全一致

● Windows SSH_AUTH_SOCK 环境变量
正常情况下 执行:
gpgconf –list-dirs agent-ssh-socket
应该会返回:
C:\Users\yourname\AppData\Local\gnupg\S.gpg-agent.ssh
这是 Unix Domain Socket 路径,但 Windows OpenSSH 默认使用 Named Pipe,尝试把这个加入环境变量,测试不通。用下面的 Named Pipe 配置才行。
设置环境变量 SSH_AUTH_SOCK
\\.\pipe\openssh-ssh-agent

● 重启 gpg-agent 终端/PowerShell 验证是否成功
ssh-add -L
如果能看到输出,说明配置成功。

● 第三方 ssh 客户端测试结果
Tabby:无需插件,添加 ssh 配置时 验证选择 Agent 即可。
MobaXterm 25.4 也增加了 Use Windows SSH Agent 选项,勾选即可正常使用。

SONY FE70-200GM 镜头内部发霉清理

2020 年,大型魔幻的一年,天天都在见证历史,然而这才刚过去一半。

而我大部分时候都只能呆在家里,相机当然就很少有机会用。经常跟朋友形容自己人都发霉了,然而不幸的是,我的镜头真的发霉了……前两天整理包包,发现 SONY FE70-200GM 这个镜头居然长霉了!还是镜头内部!!仔细看了一下应该是在第一片镜片(也就是常说的“前玉”)内侧,意味着必须拆开镜头才能清理(这里应该庆幸其他镜头没事……)。翻了一下购买纪录,确认已经过保,打电话咨询了一下 SONY 特约维修站 ,告知在不需要更换任何配件的情况下,清理的费用大概是 800 多……当然准确报价需要送修检测后才能确定,而且 GM 镜头必须发到上海才能处理。虽然目前只有很小一点,拍照也不会影响画质,可是这霉斑很容易继续扩大,会严重伤害镜头。然后我就开始琢磨是否可以自己清洁,毕竟穷啊。但是必须得有十足的把握才敢动手。

发霉位置(红色标记)
↑↑发霉位置(红色标记)

拆机有风险!拆机有风险!拆机有风险!请勿模仿,这不是专业维修指南,如果你要拆,请自行评估和承担风险!请自行评估和承担风险!请自行评估和承担风险!

阿里云国际/Bandwagon VPS搭SS笔记

梗概:简单记录一下在阿里云国际、Bandwagon的VPS上,用Debian 8、Debian 9 升级系统、内核,搭SS服务,开启BBR加速的步骤,无需任何脚本。也当自己的笔记,以备下次使用。

阿里云国际最近有新用户送$300优惠券的活动(其中只有50美元可用于开主机),注册了一个试用,大概可以跑最基本款的主机2个月。除此之外还推了各种优惠,比如新加坡$4.5/月,美国硅谷$30/年等优惠。至于安全性,不太清楚,目前我也只是试用 。Bandwagon之前有很多便宜的Micro的机型,已经不再销售,在售的就是$19.99/年的型号,普通用户也完全够用。两者安装配置方法基本类似。

以阿里云国际为例吧。

1、创建ECS实例。系统镜像最高只有Debian 8可选,没关系,可以自行升级。然后在安全组,配置规则,开放你想用的端口,比如443。

2、升级系统。SSH登陆VPS,编辑/etc/apt/sources.list,添加Debian 9的官方源,以及backports源。并删除/etc/apt/sources.list.d/sources-aliyun-0.list 文件里三个阿里云自家的镜像地址(可能是这几个地址已经变动,更新的时候会报404,反正也用不上,直接删除就好)。
deb stretch main contrib non-free
deb-src stretch main contrib non-free
deb stretch-updates main contrib non-free
deb-src stretch-updates main contrib non-free
deb stretch/updates main contrib non-free
deb-src stretch/updates main contrib non-freedeb stretch-backports main
然后apt-get update,apt-get dist-upgrade 开始升级系统,全部选Yes、安装新版就好,结束后reboot重启系统。

3、开启BBR。升级完系统后,Linux内核版本是高于4.9的,可直接开启BBR。
修改 /etc/sysctl.conf 文件,添加:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
sysctl -p
可用 lsmod | grep bbr 确认,只要有数据显示就表示成功。

4、安装SS。Debian的backports源中,已经包含shadowsocks-libev,无需任何脚本,这应该是最简单的安装方法。比起自己编译,唯一的差别是这个源的版本更新会稍微慢一点点,目前已更新至3.0.8。
首先需要从backports中安装一个依赖包,不能从main里安装,因为版本太低!
apt-get -t stretch-backports install libsodium18
apt-get -t stretch-backports install shadowsocks-libev
然后修改 /etc/shadowsocks-libev/config.json 配置服务器地址、端口、密码、加密方式。
注意,此处有坑,用阿里云的,Server IP必须填内网IP!!Bandwagon的正常填。
然后 /etc/init.d/shadowsocks-libev restart,就可以顺利使用了。

5、清理系统(可选)。因为跨版本升级了系统,必定有一些残留,比如老版本内核、软件包什么的。
uname -a 列出正在使用的内核
dpkg -l | grep linux 列出所有安装的内核
apt-get purge linux-image-XXXX 删除老版本内核
update-grub
apt-get autoclean
apt-get autoremove
apt-get clean
这样大概足够了。

6、其他。
/etc/init.d/shadowsocks-libev status 可以查看SS运行状态,如果看到一行提示:“doesn’t have enough entropy”,具体英文忘记了。apt-get install havaged 然后重启SS应该就解决了。

如果不想跨版本升级也没问题,Debian 8也可以的,在第2步的时候把源地址改为8的就行,同时添加jessie-backports、jessie-backports-sloppy源,然后用apt-get -t jessie-backports install linux-image-amd64 升级内核。

Bandwagon可以直接选Debian 9,稍微折腾少一点,有一点需要注意的是,用apt-get upgrade升级软件包的时候,SSH程序会被升级,重启后SSH端口会变回默认的22,而不是后台随机分配的那个,可以自行修改配置文件更改。//END.

顺便放上自己的推荐链接吧,有需要的可以点击注册获得新手礼包。
https://account-intl.aliyun.com/register/intl_register.htm
https://bandwagonhost.com/aff.php?aff=18240