SSHD 启用密钥登录

文本仅做简单记录

  • 首先在服务器上生成密钥和公钥, 使用ssh-keygen, 默认会在~/.ssh目录下生成两个文件 id_rsa(密钥), id_rsa.pub(公钥)
  • 复制id_rsa.pub为authorized_keys
  • 修改/etc/ssh/sshd_config配置文件
PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2


最后可以禁止密码登录,首先确保密钥登录成功
#PasswordAuthentication no
  • 把id_ras复制到客户端,linux 直接使用 ssh -i 参数指定密钥, windows, xshell, 选择验证方式PublishKey, 然后导入id_rsa密钥即可。

iHuman Android API 请求sign计算方法

本文主要讨论API请求sign计算方法

背景

iHuman Android APP 里面有一些音频资源,直接抓包就可以拿到请求参数,然后直接可以用来请求资源。
由于timestamp没有检验,抓到的请求参数在登录信息没有变更的情况下应该是可以一直使用的,
但是如果你在登录的设备上重新登录或者登录其它账号,那么之前的请求参数就不可用了,需要重新抓包。

Example

{
    'uid': '123456',
    'app_version': '4.1.0',
    'sign': '02049776b9faba39d375e2a44ewgwkqw288sf3sfa6ab16875063d49ad9f0ed494'
    'device': 'phone',
    'deviceid': '403d8d2wqf32453tre6t34t345yt4ec03a',
    'platform': 'Android',
    'token': '00MYUISKWU923kjsdfuih3CFzwaw9ku5OAElVvvOg=',
     'timestamp': '1611029052'
}

先看一下主要的参数

  • uid: 就是用户的唯一ID
  • app_version: 使用app版本,
  • sign: 就是使用其它的某些参数,通过一定的加密算法得到的,下面主要讲如何计算该签名
  • device: 好像是固定的phone.
  • deviceid: 每一台设备都会有一个唯一的ID,
  • platform: 我的是Android,
  • token: 应该是服务器签发给客户的一个凭证,
  • timestamp: 就是时间戳

最终我们大概得到这样一张表

Field value 8 10 15 27
uid 1
deviced 2
timestamp 8
token 16

Sitecore 9.3 SXA lowercaseUrls is not working

Reference

https://doc.sitecore.com/developers/93/sitecore-experience-manager/en/build-item-and-media-urls.html
https://www.pintle.dk/insights/link-generation-in-sitecore-9-3/

Starting from Sitecore 9.3 there are changes to link generation functionality as well as enhancements to URL builder options configuration capabilities

The follow config comes from sitecore showconfig

<!--  URL BUILDERS  -->
<!--  URL BUILDERS  -->
<links>
    <urlBuilder>
        <alwaysIncludeServerUrl>false</alwaysIncludeServerUrl>
        <languageEmbedding>asNeeded</languageEmbedding>
        <languageLocation>filePath</languageLocation>
        <lowercaseUrls>true</lowercaseUrls>
        <encodeNames>true</encodeNames>
        <useDisplayName>false</useDisplayName>
    </urlBuilder>
    ...
</links>

在Linux上使用redsocks, shadowsocks/v2ray进行全局代理

0x1.引用

http://wonderkun.cc/index.html/?p=394

0x2.背景介绍

由于所处的网络环境被限制,无法使用Aria2等BT工具下载种子,所以只能使用代理伪装一下
把所有流量都转发到代理服务器上.

0x3.前提

默认电脑上已经安装shadowsocks, v2ray等代理软件,并打开了1080(socks5)代理端口,或其它的代理方式.

0x4.安装redsocks

本篇主角redsocks登场, 首页安装redsocks,这里使用仓库安装sudo apt install redsocks
安装完成以后,默认配置文件:/etc/redsocks.conf
一些常用的命令:

sudo service redsocks start     #打开redsocks
sudo service redsocks stop      #停止redsocks
sudo service redsocks restart   #重启redsocks

sudo systemctl enable redsocks  #开机启动redsocks
sudo systemctl disable redsocks  #停止开机启动redsocks

v2ray-plugin & v2ray as server

引用

https://www.viagle.cn/blog/0015661425086431d7c969c88854e5294d6b8ee4efc3c13000
https://github.com/v2ray/discussion/issues/173

说明

在上一篇里shadowsocks v2ray-plugin websocket tls nginx, 我们介绍了v2ray-plugin的使用方法, 客户端[Client]: shadowsocks + v2ray-plugin , 服务器[Server]: nginx + shadowsocks + v2ray-plugin,
现在把服务器端修改为:nginx + v2ray. 配置文件和之前的v2ray配置稍为有点不同。

步骤

如果想用 v2ray做服务器[server], shadowsocks + v2ray-plugin做客户端[client]的话需要在server

  • 设置一个任意门(tag:ws-in),地址设置为 v1.mux.cool,传输协议设置websocket
  • 设置一个ss inbound (tag:ss-loc),传输协议不配置
  • 设置一个freedom outbound (tag: ws-out),redirect到 ss-loc这个inbound
  • 配置路由 ws-in -> ws-out,ss-loc -> 默认freedom

shadowsocks v2ray-plugin websocket tls nginx

Shadowsocks 使用v2ray-plugin插件 与nginx配置

引用

https://github.com/shadowsocks/v2ray-plugin
https://gist.github.com/shuanghua/c9c448f9bd12ebbfd720b34f4e1dd5c6
https://github.com/M3chD09/shadowsocks-with-v2ray-plugin-install
https://github.com/shadowsocks/v2ray-plugin/issues/48
https://github.com/v2ray/discussion/issues/173

说明

从去年开始就一直再使用v2ray+websocket+nginx, 一直都很稳定, 也有可能是人个使用流量比较小, 也是不完全是之前SS(SSR)也是个人使用, 不知道为什么就被封了, 哈哈,
简单说下v2ray使用过程,

  • 服务器端(linux)很好部署一行命令就搞定了,bash <(curl -L -s https://install.direct/go.sh),
  • windows客户端v2rayN也很好使用, 和windows版的$$差不多, 简单配置一下就好了,
  • 最主要的是Anroid客户端, 后台常驻,又不想单独设置, 所以自动分流比较重要 常用的:
    • bifrostV 不开源,有广告, 自动分流比较好使
    • v2rayNG 开源, 无广告, 自动分流不太好使
    • Kitsunebi 今年才听说, 尝试了, 自动分流效果一般

以上几个就自动分流效果都不能和SS的GFW列表相比, 今天正好有时间看了一下v2ray-plugin. 有了之前v2ray+websocket+tls+nginx的经验, 这次的配置相对简单.

Sitecore custom language prefix in the requested URL 2[Sitecore自定义URL中的语言前缀 2]

Sitecore自定义语言前缀 方式二[更简单][推荐]

引用

https://community.sitecore.net/technical_blogs/b/sitecorejohn_blog/posts/repost-overriding-sitecore-39-s-logic-to-determine-the-context-language
https://community.sitecore.net/technical_blogs/b/sitecorejohn_blog/posts/prevent-the-sitecore-asp-net-cms-from-interpreting-url-path-prefixes-as-language-names

今天我们主要说明一下, 如果自定义URL中的语言前缀, Sitecore 默认语言前缀: en, zh-CN, zh-TW, it-IT...
以简体中文为例: Sitecore默认URL路径中都会包含zh-CN, http://www.xxx.com/zh-CN/about

目标

zh-CN替换为cn, 访问http://www.xxx.com/cn/about 能够正常显示简体中文页面.

分析

上篇博客中我们已经实现了此功能, 但是有点复杂, 后来我又做了些尝试,找到了更新简单的方法.
不需要重写LanguageResolverItemResolver, 只需要重写StripLanguage就可以了, LinkProvider保持不变
我们知道了StripLanguage pipeline, 它会自动识语言前缀删除并重定向, 我们要做的就是识别自定义语言前缀, 并把它转换为相应的语言,然后再重定向.
实现上面的目标, 要自定义2个pipeline.

  • 重写Sitecore.Pipelines.PreprocessRequest.StripLanguagepipeline, 识别自定义语言前缀, 并把它转换为相应的语言,然后再重定向.
  • 重写Sitecore.Pipelines.HttpRequest.LanguageResolver pipeline. 把客户端请求URL中的cn转换为zh-CN语言.

Sitecore custom language prefix in the requested URL 1 [Sitecore自定义URL中的语言前缀 1]

Sitecore自定义语言前缀 方法一

已经实现了更简单的方式二, [推荐]

引用

https://community.sitecore.net/technical_blogs/b/sitecorejohn_blog/posts/repost-overriding-sitecore-39-s-logic-to-determine-the-context-language
https://community.sitecore.net/technical_blogs/b/sitecorejohn_blog/posts/prevent-the-sitecore-asp-net-cms-from-interpreting-url-path-prefixes-as-language-names

摘要

Sitecore 支持多语言, 确定上下文语言的默认逻辑是使用以下面的变量:

  • sc_lang查询字符串参数
  • 请求的URL中路径中的语言前缀
  • 与上下文站点关联的语言cookie
  • 与上下文逻辑站点关联的默认语言
  • web.config 中指定的DefaultLanguage设置

今天我们主要说明一下, 如果自定义URL中的语言前缀, Sitecore 默认语言前缀: en, zh-CN, zh-TW, it-IT...
以简体中文为例: Sitecore默认URL路径中都会包含zh-CN, http://www.xxx.com/zh-CN/about

Puppeteer Headless浏览器与自动化测试

1 Headless浏览器 与 Puppeteer

1.1 Headless 浏览器

无头Chrome在Chrome 59中发布。这是在无头环境中运行Chrome浏览器的一种方式。 基本上,运行没有Chrome的Chrome! 它将Chromium和Blink渲染引擎提供的所有现代Web平台功能引入命令行。

那么这个浏览器可以用来干嘛?

想象一下每次在发版前,测试人员都需要测试系统的功能,重复且乏味。于是你决定让程序自动测试界面上的功能。你不需要浏览器有GUI界面,想通过编程的方法来驱动浏览器进行各种操作,并且希望能在服务器端运行,这样每次发版前就可以自动测试相关功能,提高测试效率。

以上只是一个应用场景,Headless浏览器可以理解为没有GUI界面的浏览器程序。由于没有界面,所以在速度上比普通浏览器稍快,它可以在自动化测试、性能检查、获取元数据(例如爬虫)和网页截图等方面发挥用途。

1.2 Puppeteer 介绍

Puppeteer 是一个 Node 库,它提供了高级的 API 并通过 DevTools 协议来控制 Chrome(或Chromium)。通俗来说就是一个 headless chrome 浏览器 (也可以配置成有 UI 的,默认是没有的)

Puppeteer API可用于截取屏幕截图,创建PDF,导航页面以及从页面获取信息等.

Puppeteer API 官方参考链接: https://pptr.dev/, Puppeteer API 中文版参考链接: https://zhaoqize.github.io/puppeteer-api-zh_CN/

Android Google Play 安装游戏时出现错误代码: 492及解决方法

背景

Android 手机无法在Google Play下载大型游戏(特指需要附加数据), 总是提示"错误代码: 492". 但下载普通应用和游戏(eg: 海岛奇兵)都没有问题.
在网上找了各种方法[清缓存, 清数据, 进入 Recovery 中清除 Dalvik cache] 都不行.

手机信息

  • 小米8
  • 内存及存储: 6+64G
  • Anroid 版本: 9 pie,
  • MIUI 版本: MIUI 10.3 by xiaomi.eu 9.1.3 开发版

原因

在一次偶然的机会下, 我发现内存卡的"Android/obb"目录为空且无法创建文件及子目录, 而且该目录修改日期为"1970/02/18"
该目录就是存储游戏附加数据的目录, 如果无法写入那些大型游戏肯定无法安装.

Viagle Blog

欢迎来到我的个人博客网站