git 常见错误
常见错误
error: RPC failed; HTTP 403 curl 22 The requested URL returned error: 403
错误场景 : windows 系统中 git push 报错
错误原因 : 大概率为用户密码错误
排查步骤 :
- 清除 windows 凭据管理中的 git 密码,或更改为正确的密码
- 编辑
.git/config文件,对url按照如下格式配置:其中.git/config url = http://USERNAME@git.server.com/test.git
USERNAME为用户名,重新执行git push,此时会要求输入用户密码,输入正确的用户密码后,可正常执行
There is no tracking information for the current branch
执行 git pull 命令时报错:
$ git pull |
此错误原因为本地的分支(activity)未和远程分支建立关联,根据提示,执行以下命令建立关联关系
$ git branch --set-upstream-to=origin/activity origin/xhy-activity |
执行报错: fatal: Ambiguous object name: 'origin/activity'.,此报错原因为本地已存在分支 origin/activity,远程也存在此分支,导致 git 无法分辨。可以执行以下命令重命名本地分支
git branch -m origin/activity activity |
重新建立关联关系
$ git branch --set-upstream-to=origin/activity activity |
关联正常后,执行 git pull 正常。
internetbs API 使用
调用 API 接口需要使用 API key 及账号密码。API 接口申请 key 时需要添加 IP 白名单,只允许从添加的白名单 IP 请求 API。
常见操作
获取域名数量
API 默认返回的数据格式为 TEXT,建议指定数据返回格式为 JSON,通过 eval(response.content) 将返回的字节类型数据转换为字典类型。
>>> params = {'ApiKey': 'key', 'Password': 'pswd', 'ResponseFormat': 'JSON'} |
获取所有域名
>>> params = {'ApiKey': 'key', 'Password': 'pswd', 'ResponseFormat': 'JSON'} |
namesilo api 使用
Python SDK 为 python-namesilo,安装方法
pip install python-namesilo |
环境信息
- Python 3.11.2
- python-namesilo==1.1.3
python-namesilo 常见用法示例
获取账号中的所有域名
使用 SDK 之前需要先登陆账号创建 API Token,详细使用方法可以查看帮助信息,获取所有域名使用方法 list_domains
>>> from namesilo.core import NameSilo |
获取指定域名的详细信息
获取指定域名的详细信息使用 get_domain_info,此方法返回一个 DomainInfo 对象,里面包括域名创建时间,过期时间,nameserver等信息
>>> client.get_domain_info('test.app') |
Windows 小脚本
定时同步数据到 Linux rsync 服务器
脚本内容如下,本示例中 Windows 版 rsync 客户端安装位置: d:\cwrsync_6.2.4_x64_free\,密码文件路径:d:\cwrsync_6.2.4_x64_free\rsync.client.pswd
|
Docker 部署 OpenVPN
环境信息
- Centos 7 3.10.0-1160
- Docker 20.10.9
- iptables
前提条件
宿主机操作系统内核配置允许数据转发,开启系统 IPv4 转发功能
Docker 部署 OpenVPN 服务端步骤
创建本地配置目录
用了在启动容器时挂载以持久化 OpenVPN 配置
mkdir /opt/openvpn1/ |
初始化配置文件
执行以下命令初始化 OpenVPN 服务端配置
docker run --rm \ |
参数说明:
udp://${PUB_IP}:1194- 指定 VPN 服务器配置,使用1194/udp端口。${PUB_IP} 为服务器公网 IP。
生成密钥(证书)文件
docker run --rm -it \ |
根据提示,输入 CA 根证书密码及名称
创建带有密码的客户端证书
执行以下命令,根据提示输入客户端证书密码及 CA 密码,生成客户端证书。如果客户端证书无需密码,最后加选项 nopass
docker run --rm -it \ |
导出客户端证书
docker run --rm -it \ |
启动 OpenVPN
docker run -it --name OpenVPN1 \ |
防火墙放通 1194/udp 端口
-A INPUT -p udp --dport 1194 -j ACCEPT -m comment --comment "openvpn" |
OpenVPN 启动后,docker 会在宿主机操作系统的 iptables 中添加对应的 MASQUERADE 规则,负责转发和 NAT 数据,具体规则可通过以下方法查看
查看 NAT 表添加的规则
$ iptables -t nat -L -v -n --line-numbers | more |
查看 FILTER 表添加的规则
$ iptables -L -v -n --line-numbers | more |
客户端连接
将 导出客户端证书 中生成的客户端证书发送到客户端,测试连接。
客户端连接失败,可以检查以下内容:
客户端日志及服务端日志,服务端日志可以通过以下方法查看
docker logs -f OpenVPN
检查是否是因为 iptables 防火墙规则 问题导致无法连接,如果防火墙相关规则丢失,可以通过重启 docker 和 OpenVPN 容器的方式恢复。
检查容器中启动的端口和 docker 映射的端口是否一致。
tar 命令用法
常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-c |
打包文件 | |
-x |
解包 | |
-t |
检测打包文件中的内容 | tar -tf test.tar |
-f |
目标文件名称,要打包或解包的文件名 | tar -cf test.tar test tar -xf test.tar |
--exclude |
打包时排除文件 打包的目录使用相对路径,排除的文件只能接相对路径 打包的目录使用绝对路径,排除的文件接相对路径或绝对路径 |
tar -cf test.tar test --exclude=runtime/* |
firewalld 使用
环境信息
- Centos7 3.10.0-1160
firewalld 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则, 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 firewalld ,但建议使用 firewalld 时仅使用 firewalld 命令。 [1]
firewalld 是 iptables 的前端控制器,用于实现持久的网络流量规则。它提供命令行和图形界面,在大多数 Linux 发行版的仓库中都有。与直接控制 iptables 相比,使用 firewalld 有两个主要区别:
firewalld使用区域和服务而不是链式规则。- 它动态管理规则集,允许更新规则而不破坏现有会话和连接。
firewalld 配置说明
配置文件目录
配置文件位于两个目录中:
/usr/lib/firewalld/下保存默认配置,如默认区域和公用服务。避免修改它们,因为每次firewall软件包更新时都会覆盖这些文件。/etc/firewalld下保存系统配置文件。 这些文件将覆盖默认配置。
配置集说明
firewalld 使用两个配置集: 运行时 和 持久
在系统重新启动或重新启动 firewalld 服务时,不会保留 运行时 的配置更改,而对 持久 配置集的更改不会应用于正在运行的系统。
默认情况下,firewall-cmd 命令适用于 运行时 配置,但使用 --permanent 选项将保存配置到 持久 配置中。
要添加和激活持久性规则,你可以使用以下两种方法之一:
- 将规则同时添加到持久规则集和运行时规则集中
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=http - 将规则添加到持久规则集中并重新加载
firewalldsudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload--reload选项会删除所有运行时配置并应用持久配置。因为firewalld动态管理规则集,所以它不会破坏现有的连接和会话。
OpenVPN 安装及使用
环境信息
- Centos 7 5.4.221
- openvpn 2.4.12
- easy-rsa-3.0.8
- iptables
OpenVPN 服务端安装配置步骤
安装 openvpn 服务端程序
epel 仓库源中包含了 OpenVPN 的安装包
$ yum info openvpn |
安装 easy-rsa
easy-rsa 主要用来生成证书
yum install easy-rsa |
vsftpd 服务常用配置说明
环境信息
- Centos 7
- vsftpd 3.0.2
FTP(File transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,
其中端口 20(数据端口)用于进行数据传输,端口 21(命令端口)用于接受客户端发出的相关 FTP 命令与参数。
FTP 有两种工作模式:
- 主动模式(PORT) - 服务器主动向客户端发起连接请求.
- 被动模式(PAVS) - FTP 服务器打开协商好的端口,等待客户端发起连接请求(默认工作模式).
FTP 协议需要用到两个 TCP 连接:
- 命令连接 - 用来在 FTP 客户端与服务器之间传递命令。
- 数据连接 - 用来在服务器和客户端进行文件传输。
无论是主动模式还是被动模式,其要进行文件传输都必须依次建立两个连接,分别为命令连接与数据连接。而主动模式与被动模式的差异主要体现在数据连接通道上。[1]
服务配置文件
通用配置
# 匿名用户和本地用户是否能登录,匿名用户使用的登陆名为ftp或anonymous,口令为空,匿名用户不能离开匿名 用户家目录/var/ftp,且只能下载不能上传。 |
匿名用户(anonymous)设置
# 若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。 |
nfs 服务部署使用
NFS(Network File System 的缩写),它的主要功能是:通过网络、让不同的机器、不同的 OS 可以共享彼此的文件
NFS 服务器可以允许 NFS 客户端将远端 NFS 服务器的共享目录挂载到自己的系统上,当作本地磁盘一样使用
环境信息
- Centos 7
服务安装
服务端安装
安装需要的软件包
yum -y install nfs-utils rpcbind |
创建数据目录
mkdir /data/NFSDataHome |
修改配置文件 /etc/exports:
/data/NFSDataHome 192.168.1.0/24(rw,sync,insecure,no_subtree_check,no_root_squash) |
相关选项说明:
| 参数 | 说明 |
|---|---|
| ro | 只读访问 |
| rw | 读写访问 |
| sync | 所有数据在请求时写入共享 |
| async | nfs 在写入数据前可以响应请求 |
| secure | nfs 通过 1024 以下的安全 TCP/IP 端口发送 |
| insecure | nfs 通过 1024 以上的端口发送 |
| wdelay | 如果多个用户要写入 nfs 目录,则归组写入(默认) |
| no_wdelay | 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置 |
| hide | 在 nfs 共享目录中不共享其子目录 |
| no_hide | 共享 nfs 目录的子目录 |
| subtree_check | 如果共享 /usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认) |
| no_subtree_check | 不检查父目录权限 |
| all_squash | 无论 NFS 客户端以哪种用户身份访问,均映射为 NFS 服务器的 nfsnobody 用户 |
| no_all_squash | 保留共享文件的 UID 和 GID(默认) |
| root_squash | 当 NFS 客户端以 root 用户身份访问时,映射为 NFS 服务器的 nfsnobody 用户 |
| no_root_squash | 当 NFS 客户端以 root 身份访问时,映射为 NFS 服务器的 root 用户,也就是要为超级用户保留权限。这个选项会留下严重的安全隐患,一般不建议采用。 |
| anonuid=xxx | 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID |
| anongid=xxx | 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID |
Centos7 安装使用 Fiddler
Centos 7 上面安装 Fiddler,需要先安装 mono,并且需要图形桌面系统支持。
Mono(https://github.com/mono/mono) is an open source implementation of Microsoft’s .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
The Mono project is part of the .NET Foundation(https://github.com/dotnet)
环境信息
- Centos 7 3.10.0-1160
- mono-complete-6.8.0
- Fiddler
- Gnome
安装步骤
安装 mono
首先安装 mono-complete,yum 源 epel 中包含了此安装包
$ yum info mono-complete |
安装 Fiddler
下载 Fiddler 安装包
wget http://www.telerik.com/docs/default-source/fiddler/fiddler-linux.zip |
解压运行 Fiddler
unzip fiddler-linux.zip -d fiddler-linux |
常见错误
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for ‘System.Windows.Forms.XplatUI’ threw an exception. —> System.ArgumentNullException: Could not open display (X-Server required. Check your DISPLAY environment variable)
启动过程中报错,原因为需要桌面系统支持。可以在图形桌面系统中开启 shell,执行启动命令 mono ./Fiddler.exe
SoftEther VPN 使用
环境信息
- Centos7 5.4.221
- SoftEther VPN Server 4.41
- iptables
SoftEther VPN Server 有两种模式,Service Mode 和 User Mode,本文档安装使用 Service Mode [1]
Service Mode- 安装之后以系统服务的形式存在(被管理)User Mode- 安装之后不存在对应的服务,(管理员)用户直接通过进程管理,程序启动停止需要(管理员)用户手动停止相应进程
安装配置过程
安装
安装依赖包
yum -y install gcc zlib-devel openssl-devel readline-devel ncurses-devel |
参考链接 下载最新的安装包,本文档使用版本 4.41 版本 [2]
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-x64-64bit.tar.gz |
使用以下命令编译生成可执行文件
make |
将编译后的目录移动到 /usr/local/ 下,并修改权限
cd .. |
cdn77 api 使用
本文档示例使用 Python3 调用 CDN77 API 的常用方法,CDN77 目前未提供 SDK,只有 REST API。 [1]
常见用法
创建调用 API 时需要的 API Token
读取 CDN resources 列表
>>> api_token = 'sliJJYTUikbdg9798384Kbbj0kj' |
根据 cdn resource id 获取流量统计数据
>>> url = 'https://api.cdn77.com/v3/stats/cdns/traffic' |
脚注
Python3 requests 库使用
环境信息
- python3.10
常见用法
基础用法可以查看系统帮助信息
>>> help(requests) |
requests 发送请求时,会自动创建 requests.Request,因此发送请求时如果需要发送更多数据,可以查看 Request 类的帮助信息,或者查看 requests.models 获取更多帮助信息,如 headers,files 等
>>> help(requests.Request) |
例如发送请求时需要添加头部信息
>>> headers = {'Authorization': token, 'User-Agent': 'Python'} |
Request 请求的响应是 ‘requests.models.Response’ 对象的实例。获取 Response 帮助,可以查看以下内容
>>> help(requests.models.Response) |
脚注
python 操作日期及时间
环境信息
- Python 3.10
常见用法
获取前一天所属月份
arrow 模块获取
以下示例使用 arrow 模块获取前一天所属月份 [1]
pip install arrow |
指定参数 months = -1 就可以计算前一个月的时间。往后一个月就是 month=+1,format 指定时间格式。
获取前一个月的天数
通过模块 calendar 获取
>>> import calendar |
python 代码性能分析工具
环境信息
- python 3.10
pyinstrument 使用
pyinstrument 可以快速找到代码运行最慢的部分,帮助提高代码的性能。支持 Python 3.7+ 且能够分析异步代码,仅需一条命令即可显示具体代码的耗时 [1]
安装
pip install pyinstrument |
命令行使用
在无需更改代码的情况下,直接通过命令行使用 pyinstrument 分析目标代码
$ pyinstrument main.py |
脚注
python 中 json 格式
环境信息
- Python3.10
Python 中操作 json 相关格式,主要使用模块 json
Python 数据类型转换为 json 格式
python 数据类型转换为 json ,主要使用方法 dumps()
>>> adict = {'a': 1, 'b': 'st'} |
json 格式转换为 Python 数据类型
>>> ajson = '[1, 2, 3, 4]' |
