问题现象
Surface Book 2 13寸, USB-TypeC接hub, 鼠标键盘接在hub上. 大约30秒-1分钟间隔键盘鼠标会停止响应. 尝试切换鼠标直接接usb也没有改善.
解决方案
据传因固件问题导致CPU过度超频影响USB设备. 通过以下命令调整DC/AC模式下CPU的最大频率, 防止过度超频. 调整后需要重启才能生效.
1 | powercfg -SETDCVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCFREQMAX 3800 |
Surface Book 2 13寸, USB-TypeC接hub, 鼠标键盘接在hub上. 大约30秒-1分钟间隔键盘鼠标会停止响应. 尝试切换鼠标直接接usb也没有改善.
据传因固件问题导致CPU过度超频影响USB设备. 通过以下命令调整DC/AC模式下CPU的最大频率, 防止过度超频. 调整后需要重启才能生效.
1 | powercfg -SETDCVALUEINDEX SCHEME_BALANCED SUB_PROCESSOR PROCFREQMAX 3800 |
Nginx版本: nginx/1.14.0 (Ubuntu)
Let’s Encrypt证书使用acme.sh客户端获取, 由Let’s Encrypt颁发.
问题现象: nginx配置https网站后, 浏览器(Edge/Chrome等)访问正常, curl访问报错提示curl: (60) SSL certificate problem: unable to get local issuer certificate
. 从Java中通过HttpClient访问也提示证书校验失败.
分析: 根据 SSL Server Test 系统测试提示 This server's certificate chain is incomplete. Grade capped to B.
多处搜索无果, 于是查看通过acme.sh获取到的几个证书, 可以看到chain.cer
中包含两个证书, *
开头的cer文件中包含一个证书, fullchain.cer
中包含以上两个证书, 考虑是否因证书链不完整导致报错.
解决方案: nginx对应server配置中:
ssl_certificate
改用 fullchain.cer
ssl_trusted_certificate
改用 chain.cer
.
改动后需重新加载服务器: systemctl reload nginx
比较疑惑的是为什么非泛解析域名就不存在这个问题, 还没太想明白.
主板: 微星MSI 迫击炮 B550
网卡: Intel Corporation Ethernet Connection (7) I219-V (rev 10)
内核版本: Linux 5.11.22-1-pve #1 SMP PVE 5.11.22-2
PVE版本: pve-manager/7.0-8/b1dbf562
问题现象: 每隔1-3分钟, 网卡会掉线15-30秒, 期间ping丢包100%, ip丢包100%. 系统日志提示如下:
1 | Aug 15 18:48:46 proxmox kernel: e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang: |
解决方法: 驱动问题, 需要关闭网卡的一些属性.
1 | ethtool -K eno1 gso off gro off tso off tx off rx off rxvlan off txvlan off sg off |
使用apt install -y ethtool
以安装以太网工具.
此改动仅限本次开机期间, 重启后会失效. 持久化保存需要修改 /etc/network/interfaces
在对应的网卡配置下, 与address
同级添加配置:
1 | offload-gso off |
不修改interfaces
也可以使用另一种方式, 即开机运行一次ethtool
命令, 创建一个ethfix.service
1 | [Unit] |
运行systemctl enable ethfix
, 即可在今后开机时自动应用改动.
e1000 driver hang | Proxmox Support Forum
e1000 driver hang | Page 8 | Proxmox Support Forum
e1000e eno1: Detected Hardware Unit Hang: | Proxmox Support Forum
局域网内Linux机器间如何快速传文件? ssh过于繁琐, 转而采用 nc
(netcat)
TL;DR:
先在接收端监听端口: nc -l 12345 > filename
在发送端写入文件: nc -w 3 <ip> 12345 < sourcefile
其中-w 3
的含义是输入数据到达末尾三秒后, 关闭socket. 针对openbsd.nc实现也可以改用 nc -N <ip> 12345 < sourcefile
. 不加这个参数会导致接收端一直等待数据而无法退出.
注意 nc
是 netcat. Ubuntu上预装的是openbsd实现. 和nmap套件中的 ncat
要区分开.
传输完成后可通过hash校验判断文件是否完整传输:
sha256sum filname
sha256sum sourcefile
需要注意的是, nc是基于明文传输的, 因此只适用于受信任的局域网环境. 公网环境下还是老实用ssh/scp/sftp吧.
因为free
没考虑到cgroups
隔离的资源, 而且改起来也很费劲了. 因此在写给LiteServer用的MCSM面板的时候, 考虑到这一点我加入了对应的patch功能: LiteServerProject/mcsm-patch.
也许我应该写一篇专门研究cgroups的文章
参考
Memory inside Linux containers Getting Memory Usage in Linux and Docker
tcpdump -nnvvXSs 1514 -i <device> <filters>
举例: sudo tcpdump -nnvvXSs 1514 -i eth0 src host 1.2.3.4
-nn
不解析协议和端口号.
-vv
输出更多详细信息.
-X
除了输出包头部信息外, 还以十六进制和ASCII码的格式输出payload
-S
输出绝对TCP报文序号. (默认是相对的)
-s <size>
设置抓取包长度为size
, 默认为65535字节. 当包长度超过此设置时将出现截断. 若出现截断则输出中会出现[|tcp]
(以tcp协议举例). 处理时间随长度增加而增加.
参考
See entire packet payload using tcpdump.
A tcpdump Tutorial with Examples — 50 Ways to Isolate Traffic
java -Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port> -jar ...
使用内存缓存(cache), 默认超时时间是15分钟.
git config --global credential.helper cache
可配置超时时间为1小时, 单位是秒
git config --global credential.helper 'cache --timeout=3600'
配置git使用ssh来替代http
git config --global --add url."git@github:".insteadOf https://github.com/
.gitmodules
但是没有生效需要先同步submodule变更到git, 再执行其他命令
git submodule sync
一句话命令行形式:
ssh -o "ProxyCommand=nc -X connect -x 代理主机:代理端口 %h %p" 目标主机 -p 目标SSH端口
配置文件形式 ~/.ssh/config
1 | Host 目标机名称 |
一句话命令行形式
ssh -J user@<JumpHost:JumpPort> user@<TargetHost:TargetPort>
配置文件形式
1 | Host 跳板机 |
端口转发会引起安全问题, 企业IT部门可能会禁止使用.
正向端口转发: listen在本地, 请求本地相当于请求远程接口
ssh -fNL 本地端口:转发目标IP:转发目标端口 user@<host:port>
注意, 转发目标IP是相对远程主机而言的. 如果想请求远程主机本身, 使用127.0.0.1
反向端口转发: listen在远端, 请求远端相当于请求本地接口. 服务器的sshd配置(/etc/ssh/sshd_config
)需包含GatewayPorts yes
或GatewayPorts clientspecified
才能监听在0.0.0.0
上, 否则只能监听在127.0.0.1
上.
ssh -fNR [允许的远端来源IP:]远端监听端口:转发目标IP:转发目标端口 user@<host:port>
注意, 此处转发目标IP是相对本地主机而言的. 如果想请求本地主机, 使用127.0.0.1
-f
运行在后台
-N
不执行任何命令, 仅用于转发数据.
ssh -D 本地代理监听端口 -fCN user@<host:port>
-C
进行数据压缩
ForwardAgent生效时, 本机的root用户和目标机上的root用户均有权限使用此agent, 因此确保仅在可信的目标主机上启用此功能.
启动ssh-agent: eval `ssh-agent`
停止ssh-agent: eval `ssh-agent -k`
, 直接kill掉对应的进程也可以. 注意清除环境变量中的SSH_AUTH_SOCK
和 SSH_AGENT_PID
.
添加私钥到agent: ssh-add
不带参数则添加默认的私钥到agent. 若要添加其他私钥, 则直接将文件名作为参数即可.
查看agent中包含的key公钥: ssh-add -L
查看agent中包含的key私钥: ssh-add -l
锁定agent: ssh-add -x
解锁agent: ssh-add -X
登录到其他主机, 并允许在对应主机上使用本机的agent:
一句话: ssh -A user@<host:port>
配置文件:
1 | Host 目标机名称 |
1 | sudo ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key |