Initial commit: skills library

- 70 skills with code and documentation
- Add .gitignore (ignore __pycache__, output/, temp/, venv/)
- Clean up test intermediates and caches
This commit is contained in:
hmo
2026-04-26 19:27:40 +08:00
commit 04db423416
861 changed files with 210414 additions and 0 deletions
+162
View File
@@ -0,0 +1,162 @@
# Skill: ssh-windows-encoding
## 技能概述
解决Windows SSH连接中的中文编码和PowerShell语法问题,特别是处理中文内容、here-string语法错误和文件传输编码问题。
## 触发规则
当遇到以下情况时使用此技能:
- SSH连接到Windows系统出现中文乱码
- PowerShell命令包含中文或特殊字符失败
- here-string语法在SSH中解析错误
- 需要传输包含中文的文件到Windows系统
## 问题诊断
### 常见症状
1. **中文乱码**`'ı'`
2. **语法错误**`here-string β֮ǰκַ`
3. **文件编码错误**:创建的文件内容乱码
### 根本原因
- SSH客户端默认使用UTF-8编码
- Windows PowerShell默认使用GBK编码(代码页936)
- here-string语法在SSH命令中解析异常
## 解决方案
### 方案1:设置PowerShell编码环境(简单命令)
```bash
# 基本格式
ssh user@windows-host "powershell -Command \"[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Your-Command\""
# 示例:显示中文
ssh hp@192.168.0.111 "powershell -Command \"[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Write-Host '中文测试成功!'\""
```
### 方案2:创建UTF-8编码文件
```bash
# 使用base64传输文件内容
content='# 配置文件
app:
name: 测试应用
version: 1.0.0'
encoded=$(echo "$content" | base64 -w 0)
ssh user@host "powershell -Command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('$encoded')) | Out-File -FilePath 'config.yaml' -Encoding UTF8\""
```
### 方案3:读取UTF-8编码文件
```bash
ssh user@host "powershell -Command \"Get-Content 'config.yaml' -Encoding UTF8\""
```
### 方案4:执行多行PowerShell脚本
```bash
script='Write-Host "第一行"
Write-Host "第二行"
Get-Date'
encoded=$(echo "$script" | base64 -w 0)
ssh user@host "powershell -Command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('$encoded')) | Invoke-Expression\""
```
### 方案5:实用函数封装
```bash
# 保存为 ssh-win-helper.sh
ssh_ps_utf8() {
local host="$1"
local command="$2"
ssh "$host" "powershell -Command \"[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8; [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8; $command\""
}
ssh_create_file_utf8() {
local host="$1"
local filepath="$2"
local content="$3"
local encoded=$(echo "$content" | base64 -w 0)
ssh "$host" "powershell -Command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('$encoded')) | Out-File -FilePath '$filepath' -Encoding UTF8\""
}
ssh_read_file_utf8() {
local host="$1"
local filepath="$2"
ssh "$host" "powershell -Command \"Get-Content '$filepath' -Encoding UTF8\""
}
```
## 使用示例
### 示例1:配置MicroClaw
```bash
# 创建MicroClaw配置文件
config_content='# MicroClaw 基础配置
app:
data_dir: ./microclaw.data
timezone: Asia/Shanghai
model:
provider: anthropic
api_key: ${ANTHROPIC_API_KEY}
model: claude-sonnet-4-5-20250929'
ssh_create_file_utf8 "hp@192.168.0.111" "microclaw.config.yaml" "$config_content"
# 验证配置文件
ssh_read_file_utf8 "hp@192.168.0.111" "microclaw.config.yaml"
```
### 示例2:安装软件包
```bash
# 安装ChocolateyWindows包管理器)
install_script='Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString("https://community.chocolatey.org/install.ps1"))'
encoded=$(echo "$install_script" | base64 -w 0)
ssh hp@192.168.0.111 "powershell -Command \"[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('$encoded')) | Invoke-Expression\""
```
### 示例3:系统信息检查
```bash
ssh_ps_utf8 "hp@192.168.0.111" "Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer | Format-List"
```
## 故障排除
### 问题1base64命令不可用
**解决方案**:使用Python替代
```bash
# Linux/Mac
encoded=$(echo "内容" | base64 -w 0)
# 通用方案(使用Python
encoded=$(python3 -c "import base64, sys; print(base64.b64encode(sys.stdin.buffer.read()).decode())" <<< "内容")
```
### 问题2PowerShell版本过低
**解决方案**:检查并升级PowerShell
```bash
ssh user@host "powershell -Command \"\$PSVersionTable.PSVersion\""
# 如果版本低于5.1,考虑升级
```
### 问题3SSH连接超时
**解决方案**:增加超时时间
```bash
ssh -o ConnectTimeout=30 -o ServerAliveInterval=60 user@host "command"
```
## 最佳实践
1. **始终指定编码**:在PowerShell命令中明确使用`-Encoding UTF8`
2. **测试简单命令**:先用简单中文命令测试编码设置
3. **使用base64传输**:对于复杂内容或脚本,使用base64编码传输
4. **验证文件内容**:创建文件后立即读取验证
5. **记录成功案例**:将有效的命令模式保存为模板
## 相关资源
- [PowerShell编码设置文档](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding)
- [Windows代码页说明](https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers)
- [SSH配置选项](https://man.openbsd.org/ssh_config)
---
*技能创建时间:2026-02-18*
*适用环境:Windows 10/11 + OpenSSH + PowerShell 5.1+*
*已验证方案:✅ 生产环境可用*
+1
View File
@@ -0,0 +1 @@
# ssh-windows-encoding - 无Python依赖