docs(note): 重组笔记目录结构并新增 MySQL JOIN 实验笔记
- 随手记笔记按主题迁移至 note/资源/(DevOps、数据库、编程) - Windows使用、go errors 等笔记迁移时同步更名为规范标题 - 新增 MySQL 空表 JOIN 导致排序索引失效实验笔记 - 移除 go操作excel 笔记
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
|
||||
|
||||
|
||||
|
||||
> 私钥永不出生(生成)于服务器,且永不离开客户端
|
||||
|
||||
|
||||
|
||||
### 客户端生成密钥对
|
||||
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -C "mail"
|
||||
```
|
||||
|
||||
- `-t`:指定密钥算法。`ed25519` 在同等安全强度下密钥更短、性能更好、是当前最佳实践;`RSA 4096` 依然安全,且兼容性更广,如果是很老的系统(OpenSSH < 6.5),可能需要`RSA`
|
||||
- `-C`:添加注释,不影响加密、解密或登录认证的安全性,纯粹是一个给人看的备注字段
|
||||
|
||||
使用上述命令会生成一对密钥,通常位于`~/.ssh`目录下:公钥是`id_ed25519.pub`,私钥是`id_ed25519`。
|
||||
|
||||
### 上传公钥到目标服务器
|
||||
|
||||
方式1
|
||||
|
||||
```bash
|
||||
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP
|
||||
```
|
||||
|
||||
方式2
|
||||
|
||||
```bash
|
||||
cd ~/.ssh
|
||||
echo "公钥内容" >> ~/.ssh/authorized_keys
|
||||
chmod 600 ~/.ssh/authorized_keys
|
||||
chmod 700 ~/.ssh
|
||||
```
|
||||
|
||||
> 手动 echo 是通用方法,但更推荐 `ssh-copy-id`,它会自动处理目录创建、权限设置和追加
|
||||
|
||||
### 测试密钥登录
|
||||
|
||||
```bash
|
||||
ssh root@服务器IP
|
||||
```
|
||||
|
||||
- 如果直接登录成功,没有询问密码,说明密钥配置完全正确,继续下一步。
|
||||
- 如果仍然要求输密码,需要检查上一步的公钥是否粘贴完整,或 `authorized_keys` 权限是否为 `600`。
|
||||
|
||||
### 修改`sshd_config`
|
||||
|
||||
修改服务器的`/etc/ssh/sshd_config`文件,将下方这些行取消注释或者添加:
|
||||
|
||||
```
|
||||
PubkeyAuthentication yes # 开启密钥认证
|
||||
PasswordAuthentication no # 关闭密码认证
|
||||
PermitRootLogin prohibit-password # root账户禁用密码登录
|
||||
```
|
||||
|
||||
保存退出后,使用`sshd -t`检查配置文件语法是否正确
|
||||
|
||||
重启SSH服务
|
||||
|
||||
> SSH服务名因发行版而异:
|
||||
>
|
||||
> `Debian`/`Ubuntu`使用`systemctl restart ssh`
|
||||
>
|
||||
> ``RHEL`/`CentOS`/`Fedora` 上使用`systemctl restart sshd`
|
||||
|
||||
### 最终验证
|
||||
|
||||
1. 使用SSH发起连接后没有输入密码的提示,能直接连接服务器
|
||||
|
||||
```bash
|
||||
ssh root@服务器IP
|
||||
```
|
||||
|
||||
2. 临时删除私钥后再次登录会报错,大概如下
|
||||
|
||||
```
|
||||
root@服务器IP: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
# 正则表达式
|
||||
|
||||
正则表达式是一种用于匹配和操作文本的强大工具,用于描述要匹配的文本模式。
|
||||
|
||||
## 匹配字符
|
||||
|
||||
### 普通匹配字符
|
||||
|
||||
| 字符 | 描述 |
|
||||
| :------- | :----------------------------------------------------------- |
|
||||
| `[xyz]` | 匹配 `[xyz]` 中列出的所有字符。例如 `[xyz]`,能够匹配目标的所有 x、y、z 字符。 |
|
||||
| `[^xyz]` | 匹配 `[^xyz]` 中列出的字符外的所有字符。例如 `[^xyz]`,能够匹配目标的除去 x、y、z 外的所有字符。 |
|
||||
| `[A-Z]` | `[A-Z]` 表示一个区间,匹配所有大写字母;`[a-z]` 匹配所有小写字母;`[0-9]` 匹配所有数字。 |
|
||||
| `[\s\S]` | 匹配所有字符(包括换行符)。`\s` 匹配所有空白符(包括换行),`\S` 匹配所有非空白符(不包括换行),两者合并即可匹配任意字符。 |
|
||||
| `.` | 匹配除换行符 `\n`、`\r` 之外的任何单个字符,等价于 `[^\n\r]`。 |
|
||||
| `\w` | 匹配字母、数字、下划线,等价于 `[A-Za-z0-9_]`。 |
|
||||
| `\d` | 匹配任意一个阿拉伯数字(0 到 9),等价于 `[0-9]`。 |
|
||||
|
||||
### 非打印字符
|
||||
|
||||
| 字符 | 描述 |
|
||||
| :---- | :----------------------------------------------------------- |
|
||||
| `\cx` | 匹配由 x 指明的控制字符。例如,`\cM` 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一,否则将 c 视为一个原义的 'c' 字符。 |
|
||||
| `\f` | 匹配一个换页符,等价于 `\x0c` 和 `\cL`。 |
|
||||
| `\n` | 匹配一个换行符,等价于 `\x0a` 和 `\cJ`。 |
|
||||
| `\r` | 匹配一个回车符,等价于 `\x0d` 和 `\cM`。 |
|
||||
| `\s` | 匹配任何空白字符,包括空格、制表符、换页符等,等价于 `[ \f\n\r\t\v]`。注意 Unicode 正则表达式会匹配全角空格符。 |
|
||||
| `\S` | 匹配任何非空白字符,等价于 `[^ \f\n\r\t\v]`。 |
|
||||
| `\t` | 匹配一个制表符,等价于 `\x09` 和 `\cI`。 |
|
||||
| `\v` | 匹配一个垂直制表符,等价于 `\x0b` 和 `\cK`。 |
|
||||
|
||||
### 特殊字符
|
||||
|
||||
| 特殊字符 | 描述 |
|
||||
| :------- | :----------------------------------------------------------- |
|
||||
| `$` | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 `$` 也匹配 `\n` 或 `\r`。要匹配 `$` 字符本身,请使用 `\$`。 |
|
||||
| `( )` | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 `\(` 和 `\)`。 |
|
||||
| `*` | 匹配前面的子表达式零次或多次。要匹配 `*` 字符本身,请使用 `\*`。 |
|
||||
| `+` | 匹配前面的子表达式一次或多次。要匹配 `+` 字符本身,请使用 `\+`。 |
|
||||
| `.` | 匹配除换行符 `\n` 之外的任何单字符。要匹配 `.` 本身,请使用 `\.`。 |
|
||||
| `[` | 标记一个中括号表达式的开始。要匹配 `[`,请使用 `\[`。 |
|
||||
| `?` | 匹配前面的子表达式零次或一次,等价于 `{0,1}`。要匹配 `?` 字符本身,请使用 `\?`。例如,`do(es)?` 可以匹配 "do" 和 "does",但不能匹配 "dog"。 |
|
||||
| `\` | 将下一个字符标记为特殊字符、原义字符、向后引用或八进制转义符。例如,`\\` 匹配 `\`。 |
|
||||
| `^` | 匹配输入字符串的开始位置。在方括号表达式中使用时,表示不接受方括号内的字符集合(取反)。要匹配 `^` 字符本身,请使用 `\^`。 |
|
||||
| `{` | 标记限定符表达式的开始。要匹配 `{`,请使用 `\{`。 |
|
||||
| `|` | 指明两项之间的一个选择。要匹配 `|`,请使用 `\|`。 |
|
||||
|
||||
### 限定符
|
||||
|
||||
| 字符 | 描述 |
|
||||
| :------ | :----------------------------------------------------------- |
|
||||
| `{n}` | n 是一个非负整数,匹配确定的 n 次。例如,`o{2}` 不能匹配 "Bob" 中的 o,但是能匹配 "food" 中的两个 o。 |
|
||||
| `{n,}` | n 是一个非负整数,至少匹配 n 次。例如,`o{2,}` 不能匹配 "Bob" 中的 o,但能匹配 "foooood" 中的所有 o。`o{1,}` 等价于 `o+`,`o{0,}` 等价于 `o*`。 |
|
||||
| `{n,m}` | m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,`o{1,3}` 将匹配 "fooooood" 中的前三个 o。`o{0,1}` 等价于 `o?`。 |
|
||||
|
||||
## 常用正则表达式
|
||||
|
||||
| 正则表达式 | 匹配内容 |
|
||||
| ------------------------------------------------ | ------------ |
|
||||
| `[\u4e00-\u9fa5]` | 中文字符 |
|
||||
| `^1[3-9]\d{9}$` | 国内手机号 |
|
||||
| `[1-9]\d{5}(?!\d)` | 国内邮政编码 |
|
||||
| `^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$` | 18位身份证号 |
|
||||
|
||||
Reference in New Issue
Block a user