之前有关于 SSH Aruba AC 提示 port 22:2: Too many authentication failures

添加了选项 IdentitiesOnly=yes 就好了的文章

今天再继续记录一下原因

sshd 会有一个MaxAuthTries的限制,作用是在多次认证失败后直接断开TCP连接

但是这里会有一个问题,key 交换也是算次数的

可以通过ssh-add -l查看目前 load 了多少 key

key 会依次与对端 sshd 进行尝试

所以如果对端 sshd 的 MaxAuthTries 设置的很小,则会产生还没试到正确的 key,就报 Too many authentication failures 了

IdentitiesOnly=yes的作用,即是只使用IdentityFile设置的 key,不用默认已 load 的 key 进行尝试,减少 AuthTries

Aruba AC 应该就是默认的 MaxAuthTries 估计只有 1 或 2,只启用了 password 认证,你一尝试用 key 就失败

Useful Tools 备忘录

好用的日志浏览器,实用且 Colorful

dnf 可直接 install

1
lnav.x86_64 : Curses-based tool for viewing and analyzing log files

Features

  • Single Log View
  • Automatic Log Format Detection
  • Filters
  • Timeline View
  • Pretty-Print View
  • Query Logs Using SQL
  • “Live” Operation
  • Themes
  • Syntax Highlighting
  • Tab-completion
  • Custom Keymaps
  • Sessions
  • Headless Mode

https://lnav.org/

如何让 SNMP 正确返回超过 16TB 的文件系统

需要 Net-SNMP >= 5.5

snmpd.conf中加入以下配置,realStorageUnits 0

详见 https://linux.die.net/man/5/snmpd.conf

realStorageUnits
controlls how the agent reports hrStorageAllocationUnits, hrStorageSize and hrStorageUsed in hrStorageTable. With this option set to ‘0’, the agent re-calculates these values for big storage drives with small allocation units so hrStorageAllocationUnits x hrStorageSize gives real size of the storage.
Example:
Linux xfs 16TB filesystem with 4096 bytes large blocks will be reported as hrStorageAllocationUnits = 8192 and hrStorageSize = 2147483647, so 8192 x 2147483647 gives real size of the filesystem (=16 TB).

Setting this directive to ‘1’ (=default) turns off this calculation and the agent reports real hrStorageAllocationUnits, but it might report wrong hrStorageSize for big drives because the value won’t fit into Integer32. In this case, hrStorageAllocationUnits x hrStorageSize won’t give real size of the storage.

总就来说就是,默认情况下 SNMP 的 hrStorageAllocationUnits 是真实的 Block size,常见为 4096 bytes

1
2
3
4
5
6
[root@pan ~]# stat -f .
File: "."
ID: 4bbdbd4b4b7c6438 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 12868767 Free: 11452648 Available: 10797288
Inodes: Total: 3276800 Free: 3211062

于是 hrStorageSize 就会超过 Integer32 的最大值

目前本体使用的是

  • Adobe Acrobat Pro DC 2100120135
    • Acrobat_DC_Web_WWMUI.exe
    • AcrobatDCUpd2100120135.msp

Crack 使用的是

Adobe-GenP-2.7.zip

对 2021 及以前友好,2022 本体大概正常,但 PDFMaker 可能不行

如遇到 Acrobat PDFMaker 试用版已过期 问题

可尝试编辑注册表

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Adobe\Adobe Acrobat\DC\Activation

添加 DWORD

  • “IsAMTEnforced” = dword:00000001
  • “IsNGLEnforced” = dword:00000000

  1. 代码高亮工具
1
brew install highlight
  1. highlight
1
2
3
4
5
6
# -s 主题
# -u 指定编码,否则中文会乱码,贴不到 keynote 里去
# -t tab 转换成几个空格,防止 keynote 中 \t 展示宽度不一致问题
# -O rtf 可被 keynote 识别

highlight -s molokai -u utf-8 -t 4 -O rtf <filename> | pbcopy
  1. 在 keynote 中粘贴

grep 带星号的文件名 返回了意外的结果

grep filename[asterisk] returns unexpected result [1]

1
2
3
4
5
$ ls
file1.txt file2.txt 'file*.txt'

$ ls | grep file*.txt
无输出

在执行grep命令之前,*先被 shell expanded 了,所以实际执行的命令是ls | grep file1.txt file2.txt 'file*.txt'

就变成了在 file2.txt 和 ‘file*.txt’ 中查找 ‘file1.txt’ 这个文本,而因为已经有文件输入,ls 的管道被忽略了

验证

1
2
3
echo 'no file1.txt' > file2.txt
$ ls | grep file*.txt
file2.txt:no file1.txt

所以,如果想只查找 ‘file*.txt’,则可以加引号

1
2
$ ls | grep '*.txt'
file*.txt

如果想使用其正则功能,则需要加上 -E

1
2
3
4
$ ls | grep -E '*.txt'
file1.txt
file2.txt
file*.txt

  1. https://stackoverflow.com/questions/20473441/grep-filenameasterisk-returns-unexpected-result ↩︎

测试连接失败

DNS 污染导致域名解析有问题,写 Hosts 可破

1
2
3
4
5
6
vim /etc/hosts

// 我只加了这两条,可以依据自身网络状况继续添加

54.230.62.121 api.themoviedb.org
13.266.238.82 api.themoviedb.org

搜索不到涩涩内容

尽管已经在账户设置中开启搜索结果中包含成人内容,但那只影响页面搜索

Video Staion 使用的 API 中并未实现

所以我们修改源码

1
2
3
4
5
6
7
8
9
vim /var/packages/VideoStation/target/plugins/syno_themoviedb/util_themoviedb.py

# _get_movie_search_data 中添加 include_adult=true 影响电影的搜索

url = constant.THEMOVIEDB_URL + 'search/movie?include_adult=true&api_key=' + api_key + '&query=' + nameEncode + '& language=' + \

# _get_tv_search_data 中添加 include_adult=true 影响剧集的搜索

url = constant.THEMOVIEDB_URL + "search/tv?include_adult=true&api_key=" + api_key + '&query=' + \

好耶!涩涩!

https://api.themoviedb.org/3/search/tv?api_key=xxx&query=Shoujo%20Sect&include_adult=true

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"page": 1,
"results": [
{
"backdrop_path": "/9EWPzs6KSgZwOvWD8plkcWQjeh0.jpg",
"first_air_date": "2008-07-25",
"genre_ids": [
16
],
"id": 45473,
"name": "Shoujo Sect: Innocent Lovers",
"origin_country": [
"JP"
],
"original_language": "ja",
"original_name": "少女セクト ~Innocent Lovers~",
"overview": "Handa Shinobu and Naitou Momoko have known each other since childhood. Shinobu fell in love with Momoko from the day they first met. Now in high school, Momoko has forgotten about the past, but Shinobu has not. Both follow their own paths but Shinbobu still hopes for Momoko to remember the promise they made long ago.",
"popularity": 4.103,
"poster_path": "/jGpFhasLjo75ZjNrg1OAGs31UEP.jpg",
"vote_average": 7,
"vote_count": 1
}
],
"total_pages": 1,
"total_results": 1
}

关于 SSH Aruba AC 提示 port 22:2: Too many authentication failures

添加选项 IdentitiesOnly=yes

1
ssh -o IdentitiesOnly=yes xxx

It works!

被 JavaScript 的 Promise 折磨了两三天后,终于有所收获,故此记录

实现在 Selenium WebDriver 中,封装一个实用函数,同时 wait until located & visible 并返回 the fisrt visible element,并保持 thenable,极大兼容性了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
driver.find = function (locator, timeout = 30000) {
return this.findElement(async () => {
return Promise.any(await this.wait(until.elementsLocated(locator), timeout).then((elements) => {
return elements.map(element => this.wait(until.elementIsVisible(element), timeout));
}));
});
}


describe('Wait & Click the first visible element', () => {
it('usage', async () => {
await driver.get('a-RHEL-nginx-index.html');
await driver.find(By.xpath("//div[@class='logos']/a").click();
});
}

NOTE

  • find() 并不是一个 async function,不然返回的是一个 Promise,需要进一步 await,无法 then 链式
  • 使用 findElement() 替我们返回了一个 WebElementPromise,WebElementPromise 才有 then(),才能 thenable [1]
  • Promise.any() 是个好东西,但方法依然是实验性的,尚未被所有的浏览器完全支持。它当前处于 TC39 第四阶段草案 [2],希望正式了之后能在 selenium-webdriver/lib/promise.js [3] 中封装一个 promise.any()
  • wait until 好像只能在这里,没有 async function 不能用 await,也不能在执行的时候它还是个 Promise {}

XXX

JavaScript 的 async, promise, await 快赶上 C 的指针了,真的头大


  1. https://github.com/SeleniumHQ/selenium/blob/944aad294d14a13345ebaf0e64df3aa68218521f/javascript/node/selenium-webdriver/lib/webdriver.js#L2402 ↩︎

  2. https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/any ↩︎

  3. https://github.com/SeleniumHQ/selenium/blob/944aad294d14a13345ebaf0e64df3aa68218521f/javascript/node/selenium-webdriver/lib/promise.js ↩︎

Versions

  • 个人改造

个人一直以来用的 Inconsolata 版本是一个好多年前的祖传版本,中间经过许多人个性定制,单双引号也早就变成了竖直的,后续又手动补充了 Powerline 系列字符,base 的版本已经不可考

  • 官方版本

https://fonts.google.com/specimen/Inconsolata

https://github.com/googlefonts/inconsolata

目前已经更新到 3.000,已经内置了更多的字符,包括 Braille Patterns(盲文), Geometric Shapes, Box Drawing, Block Elements 等,可以让你的 tui 更加炫酷,如 btop++ 等的进度条和统计图的显示

但似乎迟迟不添加 Powerline,也是迷惑

新版本还添加了对 ligatures 的支持,可以理解为连字,比如 >= 变成占一个字符的真正的大于等于号,=>, === 等也有变形,这个版本的字体叫 Ligconsolata

  • InconsolataDz & Inconsolata-g

https://leonardo-m.livejournal.com/77079.html

早期的对官方 Inconsolata 的著名修改版,因为官方版长期不更新。主要修改包括,把单双引号变直;把点和逗号变得更明显;把加斜杠的 0 变成加点的 0;把 ^ 变得更宽等

但也很久没有更新了,没有现在这些乱七八糟字体的支持,也没有 Powerline

  • Inconsolata for Powerline

Powerline 是啥不用多说,官方放出了许多 patched 好的各种字体,其中也包括 Inconsolata, Inconsolata-g, InconsolataDz, 都命名为Inconsolata xxx for Powerline

优点自然是支持 Powerline 字符了,左右小三角啦,branch 图标啦

缺点就是官方 patched 基于的 Inconsolata 字体也是比较老的,不会随 googlefonts 的更新,自然也没有后续字符的加入

  • 个人再定制

https://github.com/powerline/fontpatcher

Powerline 的项目中也带了一个 fontpatcher,基于 FontForge。但装起来麻烦,个人推荐另一款,可以 docker

Nerd Fonts

https://www.nerdfonts.com/

https://github.com/ryanoasis/nerd-fonts#font-patcher

提供docker pull nerdfonts/patcher免去安装 FontForge 的麻烦

通过docker run --rm -v ~/myfont/patchme:/in -v ~/myfont/patched:/out nerdfonts/patcher执行

常用参数有

1
2
3
4
5
     --mono: 代码用字体,mono 少不了
-c: 我全都要.jpg
--careful: Do not overwrite existing glyphs if detected
-w: 增强 Windows 兼容性,Limit the internal font name to 31 characters (for Windows compatibility)
--powerline: --啥就添啥

是目前用得最爽的一款 fontpatcher,让 Inconsolata 焕发新生!

一个程序员 = 一把键盘: HHKB + 一款字体: Inconsolata + 一套配色: Molokia

1
2
curl 'wttr.in?format=3'
Beijing, China: ☀️ +5°C

OS 差异

  • macOS

macOS 上使用 iTerm2,字体安装的话很方便,可以brew install font-inconsolata,其中的 inconsolata 是随 googlefonts 比较新的,inconsolata-for-powerline 等是上面提到的其它 repo 的比较旧的。

iTerm2 的 Powerline 支持可以直接,Preference > Profiles > Text,勾上 Use built-in Powerline glyphs,省去自己打 Inconsolata 补丁的麻烦。

macOS 还是适合程序员啊!

  • Windows

Windows 上就比较麻烦,需要先给 Inconsolata 打补丁以支持 Powerline 字符。nerdfonts 打出来的字体没有被标记为 fixed-width,所以默认不会被 SecureCRT 承认,需要修改 Global.ini,位置详见 SecureCRT 的 Global Options > Configuration Paths,修改 Allow Proportional Fonts 那行的值为 00000001,重新打开 SecureCRT 即可

0%