ssh execute background jobs remotely
ssh远程执行后台作业时,在命令行最后添加&
标识并不是太好用,ssh还是会挂起,无法正常退出,可以使用nohup,并且重定向其所有的三个标准输入输出来解决:
1 | ssh -T server << EOF |
References:
[1]nohup
ssh远程执行后台作业时,在命令行最后添加&
标识并不是太好用,ssh还是会挂起,无法正常退出,可以使用nohup,并且重定向其所有的三个标准输入输出来解决:
1 | ssh -T server << EOF |
References:
[1]nohup
反引号backquote/backtick操作符默认是在本地命令行中展开的,因此如果要在远端执行此操作符有以下几种写法:
HereDoc
转义``
或者$()
1 | ssh -T server << EOFSSH |
或者将heredoc开始标志用单引号引用起来,指示shell不要解释heredoc中的特殊字符和指令
1 | ssh -T server << 'EOFSSH' |
单独的脚本文件
将脚本写入单独的文件,然后:
1 | $ cat foobar.sh ssh -T server |
或
1 | $ ssh -T server < foobar.sh |
TLS-SNI-01已经deprecated,但certbot尚不支持tls-alpn-01验证方法,因此可以使用dehydrated或者acme.sh通过https来获取Let’s Encrypt证书。
下面使用acme.sh,由于使用80,443端口的权限,拷贝证书文件的权限以及reload nginx的权限等问题,使用acme.sh正确的姿势应该是使用root账户来运行。
安装
1 | # curl https://get.acme.sh sh |
如果使用acme.sh standalone方式来获取证书,还需要安装socat
1 | $ sudo apt install socat |
http方式获取证书
http验证支持standalone、webroot或webserver(apache,nginx)方式获取证书,获取证书的过程不会破坏系统环境。
standalone方式,acme.sh会启动一个使用80端口的web server
1 | # acme.sh --issue -d mydomain.com --standalone |
80端口需要特权用户才能监听
webroot方式,指定正在运行的网站的root目录
1 | # acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ |
webserver方式,指定使用的web server,目前支持apache和nginx
1 | # acme.sh --issue -d mydomain.com --apache |
默认申请的是RSA证书,acme.sh同样支持申请ECC证书,只要添加额外的--keylength
参数即可,支持申请256和384位的ECC证书
1 | # acme.sh --issue -d mydomain.com --standalone --keylength ec-256 |
安装证书
1 | # acme.sh --installcert -d mydomain.com \\ |
自动更新证书
acme.sh自动安装了crontab入口,acme.sh会自动记录下申请证书和安装证书的命令,所以会在设定的周期内自动自行这些指令。
手动更新证书
1 | # acme.sh --renew -d example.com --force |
或者ECC证书
1 | # acme.sh --renew -d example.com --force --ecc |
acme.sh自动更新
1 | # acme.sh --upgrade --auto-upgrade |
关闭自动更新
1 | # acme.sh --upgrade --auto-upgrade 0 |
手动更新
1 | # acme.sh --upgrade |
卸载
1 | # acme.sh --uninstall |
References:
[1]Deploying Let’s Encrypt certificates using tls-alpn-01 (https)
[2]使用TLS-ALPN-01验证签发证书
[3]dehydrated
[4]acme.sh
[5]TLS ALPN without downtime
[6]acme.sh中文说明
Let’s Encrypt因为安全性问题已经将TLS-SNI-01验证方法标记为过时,而且很快就不能使用了。
nc要使用netcat-openbsd版本或者使用nmap实作的ncat
编辑菜单项时,alacarte突然崩溃,应该是因为wine生成的菜单有乱码导致的。
brew没有打包mypaint,所以使用macports来安装
windows平台生成的zip文件名是使用CP936也就是GBK编码的,导致这样的文件在linux平台utf-8环境下解压缩的时候文件名会成为乱码,这个问题由来已久,但并没有从zip那边有个根本性的解决方案。
可以使用python的zipfile模块来解决这个问题。
python3版本:
1 | #!/usr/bin/env python3 |
因为zipfile把所有非utf-8编码格式的文件名都作为cp437进行处理,因此需要先还原回cp437,然后重新编码为cp936。
python版本见Reference[1]。
References:
当配置了多个源,特别是添加backports源之后,一个package可能有多个候选版本
源是有优先级的,apt会默认从优先级高的源安装package
可以通过apt-cache来查看package候选版本信息
1 | $ apt-cache policy tmux |
可以看到backports源优先级比较低,所以默认安装并不会安装最新版本
可以通过指定版本来安装
1 | $ sudo apt install tmux=2.8-1~bpo9+1 |
bpo就是backports的缩写,
或者指定从backports源里安装:
1 | $ sudo apt install tmux -t stretch-backports |
还可以查看源里多个版本的详细信息:
1 | $ apt-cache show tmux |