给ESXi应用阿里云证书

网上有很多教程如何给ESXi使用自己的证书,我折腾了一回还把ESXi搞瘫了几天,记录一下供各位参考,免得你们跳进同一个坑。

这里有一个Windows下比较完整的教程,我的主要操作步骤也是参考这个的:

https://koolshare.cn/thread-137269-1-1.html

 

Step 1:购买域名并购买阿里云证书

略,这个不知道也没必要折腾这个了。

 

Step 2:生成CSR文件,这一步就是坑关键

生成CSR文件的openssl命令,注意参数:

openssl req -new -nodes -out rui.csr -keyout rui-orig.key -config openssl.cfg

根据这个教程是需要在windows下下载openssl,其实在OSX下本身就支持这个命令,关键是openssl.cfg文件,其实也是不需要的,openssl支持在命令行提示中输入(完成)配置。

后面回头看这个命令,其实也非常好理解-keyout rui-orig.key,这个参数的意思是:生成一个key文件,而我则是在参考了这个文章中的内容后,按如下顺序执行的:

https://yq.aliyun.com/articles/47314

命令1:openssl genrsa -out some.key 2048

命令2:openssl req -new -key some.key -out some.csr

这两个命令一个生成.key文件,一个生成.csr文件。第2个命令会提示你输入相关信息(比如:CN/HN/CS等,注意common name必须是你的域名,其它包括邮箱密码都可保持为空)

生成的.key文件最后需要上传到ESXi上,而csr文件则用于申请证书。

注意在windows版的教程中还有一个命令是

openssl rsa -in rui-orig.key -out rui.key

如果按我的两个命令的方法执行则不需要再执行这个转换的命令,因为用openssl genrsa本来生成的就已经是RSA的私钥。

在没有解决这个问题之前,我先通过搜索找到这样一篇文章,可以通过keychain生成csr但很遗憾我没有找到方法得到.key文件,所以就卡在这了。

https://www.jianshu.com/p/f20caf82938d

而我最大的特点是勇于折腾,在没有key文件的情况下,覆盖了crt文件并重启了ESXi,然后就没有WebUI了,解决的方法后面讲。

 

Step 3:用生成的csr文件生成证书

这个与前面的windows教程完成一致,只强调一个:申请证书时填的域名必须与CSR文件中的common name中的域名完全一致。

Step 4:下载并替换证书

从阿里云下载签发域名的Nginx版证书,后缀应是pem格式,假设这个文件为A

之前生成的some.key文件,假设这个文件为B。

通过SSH登录到ESXi,进入目录/etc/vmware/ssl目录,备份(我理解其实删除也完全没问题)rui.crt/rui.key这两个文件。

然后,通过vi命令创建新的rui.crt/rui.key这两个文件并保存,内容是:

A-> rui.crt

B->rui.key

 

Step 5:重启Management Agent

不知道命令行怎么重启,我正好连在console上,用键盘重启的,没有连接console的话直接重启ESXi效果也一样。

前面生成csr的时候因为没有生成正确的key文件,所以出现了一个非常严重的问题就是Management Agent(WebUI)连接不上了,但SSH正常。

解决的方法非常简单(需通过SSH连接):

1)备份后移除/etc/vmware/ssl下的rui.crt/rui.key这两个文件

2)执行/sbin/generate-certificates命令重新生成证书

3)重启Management Agents

 

操作完成后,可通过域名直接访问ESXi,Chrome不会提示证书异常,同时也可以保存密码了,对我等强迫症来说是个好事。

 

Continue Reading

推荐一款OSX下的截屏软件SnipPaste

一直想要一款心目中理想的截图软件:

1. 简洁快速

不要有乱七八糟的功能,加载和使用的速度快。

2. 支持截图后的标注操作,功能够用就行。

支持画框,箭头,文字,涂抹(马赛克)基本上就够用了。

3. 支持通过快捷键保存到剪贴板和文件

有两种比较常用的模式:

一)截图后立刻编辑(标注)然后保存(可通过快捷键选择进剪贴板或文件),一般截图都是这个情况。

二)截图后不需要编辑直接进剪贴板或文件。大量截图不需要标注的,这种情况比较少见,而且如果标注窗口支持快捷键的话对操作影响也很小,所以其实只需要完美的支持模式一即可。

前面用过的软件很多,主要是系统自带+SNIP。

SNIP其实也非常不错,前面我也推荐过,后面为什么改用系统的我不记得了。最近在大白软件站看到了截图软件推荐的SnipPaste就用一下试试,发现也非常不错。

 

UntitledImage

软件支持win/osx,目前osx仍是beta,官网上也没有截图。

优点:

1. 功能简洁但足够的强大;

2. 上面所有的需求都支持,同时还支持取色,这一点很好;

3. 支持多种快捷键保存方式,模式一和二都能比较好的支持。

4. 有一个很好用的paste功能:当你想要“标注”一个已经存在的图片时,从系统里复制然后paste就可以编辑了。

5. 支持很多有特色的选择操作(按像素调整选择区域)

缺点:

1. 先说最大的缺点:不支持长页面的截图,这一点确实是很大的问题,但已列入更新计划。XNIP就支持,但免费版有水印。

2. 标注界面比xnip少一个很常用的自动编号数字的功能。写操作手册时很需要。

3. 标注段选择保存为文件支持两个模式:手工保存(cmd+S)和快速保存(cmd+shift+s),前者快捷键简单但需要用户确认一次文件名,而快速保存则可以取消。建议交换这两个快捷键。不过支持另外一个快捷操作的配置:Enter/鼠标双击/中键双击的默认操作配置。可以把Enter配置成进剪贴板,双击快速保存。

4. 之前以为不支持选择控件,其实是需要开启一个配置项。

 

总结一下:

XNIP与SnipPaste我觉得都挺不错,关键功能上Xnip支持Scroll截图占优;但细节功能上后者明显更为强大。Xnip的高级功能收费(Scroll免费版有水印),SnipPaste细节功能较多且适合喜欢键盘操作的开发人员使用。SnipPaset能够快点支持Scrollfalr话就可以抛弃Xnip了,如果能够支持前面的标注自动增长序列更好。

话说我现在的截图用的是系统自带的,我完全不记得为什么放弃XNIP了:)因为不支持对TouchBar截图?

 

Continue Reading

迁移gitea遇到的remote rejected的问题

备案域名之后,把git服务从原来的aws免费主机搬回了国内,同时修改了域名指向,恢复了gitea服务之后,有同事反映说commit失败:

Snipaste 2020 02 08 00 05 50

一般的说法是权限问题,但是整个恢复(迁移)过程并未对gitea的用户权限做修改,而用管理员账号做过新的repo的commit操作均是正常的,后面在gitea@github找到答案:

https://github.com/go-gitea/gitea/issues/2270

UntitledImage

登录gitea后台,dashboard执行一下(Resynchronize pre-receive, update and post-receive hooks of all repositories.)搞定。

UntitledImage

Continue Reading

阿里云DDNS重复A记录问题

前面提到使用了阿里云的动态DDNS,发现域名解析中出现了多个A记录,一开始以为会自动失效(过期),后来发现不是,于是又开始了折腾:

1. 用的是Padavan固件所带的脚本功能;界面上没怎么仔细写逻辑需求,链接里也没仔细的写要求,只写了需要几个KEY,这个当然是正确的(不然A记录也没办法新增),于是通过SSH登录进去,终于在/etc/storage/script下找到了Sh42_aliddns.sh文件;

2. 读完脚本大概确定逻辑,脚本会先通过API获取所有的域名记录,并尝试获取recordid;如果获取成功则updateRecord,反之则addRecord,显然问题出现在:)

3. 脚本是通过“query_recordid | get_recordid”两个函数获取返回值,前一个是通过API获取域名解析记录,后一个是从中解析出相应域名的recordid,所以也不能判断到底是返回值错误还是解析结果出现了问题,于是写了一test函数,加到脚本中:sh Sh42_aliddns.sh test测试query_recordid的结果,错误提示非常明确:“”Code”:”Forbidden.RAM”,”Message”:”User: not authorized to operate on the specified resource, or this API doesn’t support RAM.”。 看起来不像是这个API不支持RAM的原因(连ADD都支持没道理Query不支持的)。

4. 查看阿里云的授权配置:)感觉没有异常,如下:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "alidns:AddDomainRecord",
                "alidns:DescribeDomainRecords",
                "alidns:UpdateDomainRecord"
            ],
            "Resource": "acs:alidns:*:*:domain/brallow.cn",
            "Effect": "Allow"
        }
    ]
}

问题其实就出现在这里,因为这个策略是我从网上抄来的,并没有仔细研究alidns有什么Action列表,实际上alidns:DescribeDomainRecords与alidns:DescribeSubDomainRecords是两个不同的Action,而脚本使用的是后者,我并没有授权这个独立的RAM访问,新增授权,问题解决。

Continue Reading

折腾SSL证书

备案了brallow.cn,又申请了阿里的免费证书,并应用了阿里的动态域名,把家里的NAS导入了新的证书:

记录几个常用的东西:
1. 用下载的证书,apache版,key是私钥;public.crt是公钥;chain.crt不知道干嘛用的,导入即可。

2. 不可应用DSM中的”自定义域名“设置,否则通过该域名访问DSM时将出现Synology的404页面;如果出现这一问题,使用IP或其它域名访问即可。

3. 应用配置后注意将该证书修改为默认证书,并将相关服务通过配置修改为新的证书(默认将使用自动生成的证书)。

可能是我的DSM的原因,开启https并应用设置重新启动web server之后并不能通过https访问,重启以后解决了。

其实我的本意是要把ESXi应用证书的,(不知道是不是这个原因,没有有效证书的情况下Chrome不能记录(保存)密码)但操作步骤太复杂了,打算放弃。

Continue Reading

ESXi异常关机,虚拟机报Failed – Object type requires hosted I/O

本来是在通过HAAS折腾DC1插座的,结果不知道为什么突然插座就断电了。

解决方法很简单,两个命令:

  1. vmkfstools -x check ./hassos_ova-3.7.vmdk,其中vmdk中待检查的磁盘文件名。
  2. ESXi会返回提示该磁盘是否需要修复,如果需要执行下一步。
  3. vmkfstools -x repair ./hassos_ova-3.7.vmdk,ESXi返回修复结果。
  4. 重启虚拟机:)
Continue Reading

2020……

祝大家新年快乐!

Happy New Year!

今年的第一个开发任务,居然会是MFC……上一次用MFC做开发应该有快20年了吧,还是MFC4 ……Lj4OrMore:)可惜的是我居然连源代码都找不到了。

Continue Reading

Gitea

一直觉得gitblit界面比较low,而且缺少基本的issue这样的功能,所以打算升级一下,有几个可能的选择:

gitlab gogs gitea

gitlab功能最强大,但是也安装复杂,最重要的是对系统的要求比较高不适合于小团队的;

gogs是gitea的爹,安装试用了一下,权限控制的功能实在是太差了。给用户加入一个organiaztion,然后呢,它就可以查看这个org下所有的repo,这也太夸张了吧?原因据说是gogs因为只有一个维护者,比较固执。

gitea是在gogs的基本上扩展的,权限上的功能有所改进,基本满足需求。

安装过程,非常简单:

  1. 在Linux上合建git用户,创建/home/git目录,并切换到此目录,同时切换到这个git用户最为合适;
  2. 下载gitea二进制文件只有一个文件gitea;[参考] 下载最新的版本就是;
  3. 执行gitea web,启动成功了!
  4. 访问http://youhost:3000/点login进入install界面;注意之前就建议过切换到git用户,否则有一些参数需要修;
  5. 切换到root用户,自行创建gitea.serivce并存放到/etc/systemd/system [参考]
  6. 执行systemctl enable gitea,启用gitea服务(自动运行)。[参考]
  7. 通过systemctl start gitea,然后通过3000端口可以访问表示服务加载正常了。

几个技巧注意一下:

  1. 资料说可以在custom/templates/中添加自定义模板从而修改界面,我测试发现有问题,后经检查发现一定要在gitea.service中设置正确的gitea home(按照我上面的描述应该是指向/home/git这个目录),相应的custom,data,gitea-repositories,log目录等均创建于此目录下,如果在gitea.service中设置的home目录不正确,则会在错误的目录下搜索tempaltes目录导致不能生效;
  2. 不要让用户加入任何组织,而是在组织内创建team,让用户加入team,这样用户可以查看:自己加入的,所属team加入的任意repo,并且可以查看team归属组织的基本信息,但不能查看(列出)其它未授权的repo;如果不让用户加入某个组织的team,则用户只能查看其加入的repo,即使这个repo属于某个组织,查看组织基本信息时也会显示404。
  3. 没找到gitea dump命令指定输出目录的参数,指定临时文件无效,最终文件仍然生成在“当前目录”,注意不是gitea所在目录。
  4. 放一个我自己用的定时任务脚本:备份整个gitea数据,保留5个备份,通过rclone同步到网盘;
  5. 直接下载的giteaweb是一个带版本号的文件,可以通过ln -s创建一个名gitea链接,这样以后升级时只要下载一个新版本并重新设置链接即可;

!/bin/bash
echo ‘do backup now’
cd /home/git/backup/
sudo -u git /home/git/gitea dump
echo ‘remove expired backups’
ls -1tr | head -n -5 | xargs -d ‘\n’ rm -f —
echo ‘sync with OneDrive’
rclone sync /home/git/backup OneDrive:/backup/gitea/

Continue Reading

ESXi单个主机定时开关机的设置

居然有人留言了,我把几个我觉得可能比较重点的地方重新标一下:)

自己在家里折腾单个ESXi主机,为了节能计划在晚上自动关机。折腾了一阵,基本搞定了。
ESXi的版本是6.7:)如果版本差异太大可能不适用。
1. 首先是如何定时关机的问题

首先是关机的问题服务器系统不存在计划性关机的功能,只能通过脚本实现。
在esxi中不支持cron命令,只能直接编辑cron文件,文件文件的路径是:
/var/spool/crontab/root
真接修改这个root文件意义并不大,因为一旦ESXi重启,这个文件会被重置。此时需要修改/etc/rc.local.d./local.sh,在exit 0这一行之前添加如下的脚本:

##以#开头的是注释行,可不添加
#get the cron service pid and kill it.
#杀掉已经存在的cron进程
/bin/kill $(cat /var/run/crond.pid)

#add shutdown script to crontab(root)
#修改/var/spool/crontab/root文件,增加相应的执行配置
#待修改的内容包括:
# 45 17 * * * 执行的时间,与cron相同,注意是UTC时间需换算
#/vmfs/volumnes/datastore1/autoshutdown.sh执行脚本路径
#注意一定要保存到datastore1这样的重启不会丢失的位置
#/var/spool/cron/crontabs/root是root用户cron配置文件位置,一般不用修改
/bin/echo ’45 17 * * * /vmfs/volumes/datastore1/autoshutdown.sh’ >> /var/spool/cron/crontabs/root

#restart cron service
#重启cron进程(将加载修改后的root文件)
/usr/lib/vmware/busybox/bin/busybox crond

  • 注意注意注意
    修改完(以前在rc.local.d后面多写了一个点:/etc/rc.local.d./local.sh应该是(/etc/rc.local.d/local.sh)文件后,工作没有结束,需要执行一次/sbin/auto-backup.sh,将修改后的local.sh文件保存,否则结果将和之前的root文件一样,重启后丢失。
  • 上面操作的实质是在ESXi重新启动时,生成(修改)/var/spool/crontab/root文件,添加自动关机的执行脚本,因此必须重启一次机器才能生效(或者手工执行一次这个脚本)
  • 一定要保存在存放虚拟机的存储空间中,这样可确保脚本不会因为重启而丢失。

2. 接下来是关机脚本的内容

#!/bin/sh

#shutdown all VMs(2,3,9 is VMID,add your VMIDs here)
vim-cmd vmsvc/power.off 2
vim-cmd vmsvc/power.off 3
vim-cmd vmsvc/power.off 9

#Poweroff Host
/sbin/poweroff

脚本中的vim-cmd vmsvc/power.off 2是关机命令,将对指定的虚拟机(VMID)发送关机命令,在宿主机关机前关闭所有虚拟机,这一操作是否有必要我不确定。我的ESXi上运行了NAS,为保护数据加这一段。
最后是关机命令。

后面查了一下,其实是有点画蛇添足了,因为poweroff就相当于直接拔插头……应该用power.shutdown,但是这个命令是异步的,后面直接跟/sbin/poweroff的话,效果未知:)

后面干脆改了,因为只有NAS是一直开机,其它虚拟机可能是不开机的,所以在NAS中自己定义的了一个计划性关机,这一部分相当于无效,可以只保留/sbin/poweroff。

附几个相关命令:
vim-cmd vmsvc/getallvms 查询所有已配置的虚拟机,可获得VMID
vim-cmd vmsvc/power.getstate VMID 通过VMID查询相应的虚拟机的当前状态(开关机)
vim-cmd vmsvc/power.shutdown VMID发送关机信号(命令),但操作系统未必会真正关机。
vim-cmd vmsvc/power.off VMID 直接关机(相当于关电源)

3. 开机:)
通过ESXi是不能实现开机,可以借助如下方案:
BIOS如果支持定时开机,可以使用,就是需要修改配置时很麻烦。
BIOS中可设置断电后再恢复时自动开机,配合智能插座的定时通断电功能,实现定时开机。
注意:这个功能可能对某些主板是无效的!我目前使用的这个主板的设置就是:只有当意外断电(非正常关机)后断电再通电时自动启动,如果是正常关机后哪怕再断电通电也不会开机。
BIOS中可设置WOL唤醒,通过路由器等执行WOL唤醒脚本:)

Continue Reading
1 2 3 12