0%

通过 HTTPS 端口使用 SSH

在某些网络环境中(奇怪的代理工具),22 端口可能被屏蔽,导致无法使用 SSH 进行 Git 推送。

这时,我们可以利用 SSH over HTTPS 的方法,通过 443 端口实现推送。以下是详细步骤:

  1. 编辑 SSH 配置文件
    首先,需要编辑你的 SSH 配置文件 ~/.ssh/config
    将以下配置加到该文件中:

    1
    2
    3
    4
    Host github.com
    Hostname ssh.github.com
    Port 443
    User git

    也可以使用以下命令一键添加

    1
    echo -e "Host github.com\n\tHostName ssh.github.com\n\tPort 443\n\tUser git" >> ~/.ssh/config

    这条命令将指定 GitHub 的主机名为 ssh.github.com, 并将端口设置为 443,用户为 git。

  2. 确保配置生效
    配置完成后,可以通过以下命令验证设置是否生效:

    1
    2
    3
    $ ssh -T git@github.com
    # Hi USERNAME! You've successfully authenticated, but GitHub does not
    # provide shell access.
  3. 使用 Git 推送
    现在,你可以正常使用 Git 命令进行推送。例如:

    1
    2
    3
    git add .
    git commit -m "Your commit message"
    git push origin main

    由于你已经将 SSH 流量封装在 HTTPS 中,推送操作应该能够顺利完成。

ImageMagick

ImageMagick是一个开源的图像处理工具集,能够在命令行下执行多种图像处理操作。以下是一些常见的ImageMagick用法,包括图像格式转换、压缩、裁剪等

安装ImageMagick

1
2
3
4
5
6
7
# Ubuntu
$ sudo apt-get update
$ sudo apt-get install imagemagick
# CentOS/RHEL
$ sudo yum install ImageMagick
# macOS
brew install imagemagick

用法

  • 转换为WebP

    1
    2
    3
    $ convert input.jpg output.webp
    # GIF动画需要增加-coalesce才能转换
    $ convert -coalesce input.gif output.webp
  • 有损转换为WebP

    1
    2
    3
    # 压缩率80
    $ convert -quality 80 input.jpg output.webp
    $ convert -quality 80 -coalesce input.gif output.webp
  • 有损转换为JPG

    1
    2
    # 压缩率80
    $ convert -quality 80 input.png output.jpg

IMG_6520

粗糙的小公猫,性格温和,随便撸

吃的特别多,是我家的 “没头脑”

1700675376837

漂亮的小母猫,性格高冷,不给撸

挑食又软便,是我家的 “不高兴”

  • 进入工作目录

    1
    2
    # 证书文件将生成到此文件夹中
    $ cd /etc/docker/cert
  • 运行生成脚本

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    # !/bin/bash

    # 一键生成TLS和CA证书
    # This script should be run via curl:
    # sh -c "$(curl -fsSL https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # or via wget:
    # sh -c "$(wget -qO- https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(wget -qO- https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # or via fetch:
    # sh -c "$(fetch -o - https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"
    # sh -c "$(fetch -o - https://ghproxy.com/https://raw.githubusercontent.com/Sowevo/my_script/main/shell/auto-generate-docker-tls-ca.sh)"


    # 需要自己更改下以下配置
    # 服务器主机名
    SERVER="10.0.8.11"
    # 密码
    PASSWORD="Super#Geostar,5"
    # 国家
    COUNTRY="CN"
    # /etc/pki/tls/openssl.cnf,即 openssl 的配置文件路径并不一定适合所有系统
    # 可以使用 find 命令找出自己系统中 openssl.cnf 的位置:
    OPENSSL_CONF="/etc/pki/tls/openssl.cnf"
    # 省份
    STATE="北京市"
    # 城市
    CITY="北京市"
    # 机构名称
    ORGANIZATION="大白兔技术股份有限公司"
    # 机构单位
    ORGANIZATIONAL_UNIT="大白兔技术股份有限公司"
    # 邮箱
    EMAIL="x@sowevo.com"

    # 生成CA密钥
    openssl genrsa -aes256 -passout pass:$PASSWORD -out ca-key.pem 4096

    # 生成CA证书
    openssl req -utf8 -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca-cert.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

    # 生成服务端密钥
    openssl genrsa -out server-key.pem 4096

    # 生成服务端证书签名的请求文件
    openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr -reqexts SAN -config <(cat $OPENSSL_CONF <(printf "\n[SAN]\nsubjectAltName=IP:$SERVER"))

    # 生成服务端证书
    openssl x509 -req -days 3650 -in server-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extensions SAN -extfile <(cat $OPENSSL_CONF <(printf "[SAN]\nsubjectAltName=IP:$SERVER"))

    # 生成客户端密钥
    openssl genrsa -out client-key.pem 4096

    # 生成客户端证书签名的请求文件
    openssl req -subj '/CN=client' -new -key client-key.pem -out client-req.csr

    # 生成客户端证书
    sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
    openssl x509 -req -days 3650 -in client-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out client-cert.pem -extfile extfile.cnf

    # 更改密钥权限
    chmod 0400 ca-key.pem server-key.pem client-key.pem
    # 更改证书权限
    chmod 0444 ca-cert.pem server-cert.pem client-cert.pem
  • 运行脚本后,检查下文件是否存在

    • ca-cert.pem
    • server-cert.pem
    • server-key.pem
  • 修改docker配置文件/usr/lib/systemd/system/docker.service

    在ExecStart属性后追加

    1
    --tlsverify --tlscacert=/etc/docker/cert/ca-cert.pem --tlscert=/etc/docker/cert/server-cert.pem --tlskey=/etc/docker/cert/server-key.pem -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock 
  • 重启docker

    1
    2
    $ systemctl daemon-reload
    $ systemctl restart docker

威联通申请证书

  • 首先通过qnapclub安装git命令

  • ssh连接威联通

  • sudo -i切换到admin(root)用户

  • 写一个重载脚本/share/Public/Script/acme/reloadcmd.sh,用于证书申请后重启服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 建文件夹
    $ mkdir -p /share/Public/Script/acme/

    # 写入文件
    $ cat > /share/Public/Script/acme/reloadcmd.sh <<EOF
    #!/bin/sh
    /etc/init.d/Qthttpd.sh stop
    /etc/init.d/stunnel.sh stop
    cat /etc/stunnel/backup.cert \
    /etc/stunnel/backup.key > \
    /etc/stunnel/stunnel.pem
    /etc/init.d/stunnel.sh start
    /etc/init.d/Qthttpd.sh start
    EOF

    # 授权
    $ chmod -R 777 /share/Public/Script/acme/reloadcmd.sh
阅读全文 »

Git多用户配置

问题

在工作与生活中,我们难免会遇到同时使用多个Git账号的情况

  • 私人的项目在Github上托管,使用的user.name配置是Sowevo,使用的user.email是user@sowevo.com

  • 公司的项目在Gitlab上托管,使用的user.name配置是lisi,使用的user.email是lisi@gitlab.com

这时就会遇到这样的问题,提交到Gitlab的代码署名确是user@sowevo.com,经常用混

解决方案

按工程配置

git的配置可以放在三个地方:

  • /etc/gitconfig 系统配置,对所有用户有效,一般不用

  • ~/.gitconfig 用户配置,仅对当前用户生有效

    1
    2
    3
    # 全局配置
    $ git config --global user.name "Sowevo"
    $ git config --global user.email "user@sowevo.com"
  • projectPath/.git/config 项目配置,仅对当前项目生效

    1
    2
    3
    # 项目配置
    $ git config user.name "lisi"
    $ git config user.email "lisi@gitlab.com"

三种配置的优先级为 项目配置>用户配置>系统配置

此时可以利用项目配置优先的规则,对公司项目单独设置user.name与user.email,但是项目如果比较多的话,每一个都要设置,比较繁琐

可以使用下一种方式配置

阅读全文 »

使用Typora写笔记的时候经常需要贴个图

Typora支持自动上传图片到图床,需要搭配一些第三方的图床工具

这里选择了PicGo-Core

设置PicGo-Core

  • 安装PicGo-Core

    1
    2
    3
    4
    # 依赖node
    $ npm install picgo -g
    # or
    $ yarn global add picgo
  • 配置PicGo-Core

    我使用的是腾讯云COS,不同的图床配置不一样,具体参考文档

    1
    2
    3
    4
    # 设置图床
    $ picgo set uploader
    # 选择默认图床
    $ picgo use uploader
  • 测试上传

    1
    2
    3
    4
    5
    # 上传具体路径图片
    $ picgo upload /xxx/xxx.jpg

    # 上传剪贴板里的第一张图片(上传时会将格式转成png)
    $ picgo upload

设置Typora

Mac设置步骤

  • 获取node与picgo的绝对路径

    1
    2
    3
    4
    # 获取node的路径 我的是 /usr/local/bin/node
    $ which node
    # 获取picgo的路径 我的是 /usr/local/bin/picgo
    $ which picgo
  • 设置Typora的上传

    • 打开偏好设置–>图像
    • 插入图片时选择上传图片
    • 上传图片设定选择Custom Command
    • 命令填入[your node path] [your picgo-core path] upload,使用上一步获取的路径替换,例如我的是/usr/local/bin/node /usr/local/bin/picgo upload

    image-20210426162439566

Winsdows设置步骤

  • 设置Typora的上传

    • 打开偏好设置–>图像

    • 插入图片时选择上传图片

    • 上传图片设定选择Custom Command

    • 命令填入picgo upload

      image-20210428223155681

记录一下OpenWrt开启外网访问并绑定SSL证书的操作

外网访问

  • 关闭只允许内网访问的设置(去掉勾选)
  • 防火墙==>端口转发 中添加端口转发,将外网5500应设置OpenWrt的80端口
  • 通过域名+5500端口即可访问

添加SSL证书

  • 编辑uHTTPd的配置文件,打开路由器的SSL 443端口

    1
    $ vi /etc/config/uhttpd

    在原有配置 list listen_http ‘0.0.0.0:80’下面加入以下两行

    1
    2
    3
    # 注意是https
    list listen_https '0.0.0.0:443'
    list listen_https '[::]:443'
  • 输入以下命令安装 acme.sh

    1
    $ curl  https://get.acme.sh | sh

    可以看到此时已经添加了定时任务

  • 此处使用 cloudflare 接口进行自动认证

    • 获取CF_Email,CF_Key两个参数,并执行以下命令
      1
      2
      export CF_Email="abcde@126.com"
      export CF_Key="de6132435csofe45464650w4646464602"
  • 输入以下命令,运行acme.sh生成证书,并将生成的证书放到uHTTPd的默认存储位置,最后自动重启uHTTPd

    1
    $ /root/.acme.sh/acme.sh --issue --dns dns_cf -d sowevo.com -d *.sowevo.com --keypath /etc/uhttpd.key --fullchainpath /etc/uhttpd.crt --reloadcmd "/etc/init.d/uhttpd restart"

    稍等一会命令执行完成(不同的dns厂商时间会有不同),证书就申请完毕

  • 将路由器的443端口映射到外网

    家宽的443端口竟然没有封,就先使着吧…

img

Docker Compose

简介

Docker

DockerFile build run 手动操作,单个容器!

微服务,服务多,相互依赖

使用Docker Compose来高效管理,定义多个容器

  • 官方介绍

    定义运行多个容器

    使用yaml配置文件

    所有环境都可以使用

阅读全文 »