linux下远程管理利器-tmux

在上一节<<linux下远程管理利器-ssh>>中,笔者有提到:上一节所讲的功能都是参照<<linux远程管理的屠龙刀>>里的功能来讲的.笔者想收回这句话,因为有替SecureCRT打广告之嫌.其实吧,这些功能无论我们使用哪种软件都是会遇到的问题.我们都要在那个软件上解决这些问题,只是碰巧上次是在使用SecureCRT的时候遇到的罢了.在使用无论哪种软件远程管理linux的时候,我们总会遇到一个靠那个软件本身所不能解决的问题:由于网络不稳定造成的连接中断!之前笔者也有遇到过,但是由于笔者的网络环境还好,所以算不上什么大问题.之前当遇到要长时间运行的指令的时候,笔者也会习惯上用screen来运行,然后退出会话.当ssh命令没有标签的概念的时候,笔者迫不及待的希望有一种解决方式解决这种问题.虽然笔者用的是GNOME Terminal它有标签的概念,而且通过自定义的快捷键启动GNOME Terminal和通过GNOME Terminal的快捷键ctrl+shift+T创建一个新标签是件很快捷的事儿.但是创建完了不是还要再输入登陆的指令嘛.如果有更简单高效的方式解决这个问题,你愿不愿意尝试呢?我愿意!
在搜索screen的相关资料的时候,一个和screen类似功能的新秀进入笔者的眼帘:tmux!对于笔者来说,两个软件都是要重新学习才能充分运用,所以在学习成本上不存在差别.而且笔者最看中的是tmux有"窗口"的概念,可以很方便的创建新的窗口和在窗口中切换.虽然screen在修改配置文件以后,也可以实现这个功能,但是!但是要修改配置文件!如果后面有N多机器的情况下,虽然批量修改也花费不了多少时间,但始终是一种损耗.在使用tmux的过程中,笔者认真学习了tmux内置的快捷键.笔者认为,这样的快捷键定义还是比较科学的,另外使用内置的快捷键而不是自定义的好处就是,你不用到每台机器上以后都重新定义你的习惯.
其实本篇就是tmux的入门级介绍啦,当然是偏快捷键.因为现在tmux的资料还是少之又少.为了知道其实一些有用的功能点,笔者也是破费心机.能够看到这篇关于tmux详细介绍的中文资料,相信你已经对tmux已经有一定的了解了.还是提一句:tmux是一个远程管理多窗口的工具,它可以允许你在一次登陆的情况下打开多个会话并方便的在会话中切换,而且软件本身就可以解决网络不稳定造成的断网问题哟.ok,进入本次的奇妙之旅:
1.控制键
控制键就是tmux的主键.当你在tmux环境下按下这个键的时候,tmux就会把你后面输入的指令,解析成它内置的功能.tmux默认的控制键是ctrl+b(同时按下ctrl和b,在后面将直接用小写的c-b代替).这相当于screen的ctrl+a.同时用过两个工具的人总会争论ctrl+a和ctrl+b的合理性.估计争论的也就是emacs和vi党.我就很不理解.这两拨人只用编辑器,不用指令吗?因为他们似乎不知道在bash环境里:ctrl+a代表跳到命令的开始,而ctrl+b代表往回移动一格.从这一点讲,笔者觉得用c-b没啥不好的.因为你按着c-b不放,在bash环境里的功能依然有效:)
2.获取快捷键帮助
前面没有提,在这里要指出的一点就是,当你按c-b的时候,我希望你已经进入"tmux环境"了.进入的方法很简单.直接在命令行输入:tmux就可以了.没有的话,安装呗.幸运的是ubuntu9.10里已经集成了tmux.虽然不是最新版,但是免去了编译的麻烦:)现在按C-b ?
接下来要介绍的东西,就是这里面列出来的,一些普遍有用的东东.查看上面或者下面的内容,直接pageup,pagedown就可以了:)退出请按q(这个百试不爽,几乎是和tmux交互的时候,都可以用这个退出)
3.常用快捷键
c-b c 创建一个新的窗口
在你正后悔当前窗口被一个指令占用的时候,这个快捷键会解燃眉之急哟.当前窗口在任务栏会显示*
如上图,现在正在操作的窗口就是3了
C-b n 切换到下一个窗口
C-b p 切换到上一个窗口
C-b l 最后一个窗口,和上一个窗口的概念不一样哟,谁试谁知道
c-b w 通过上下键选择当前窗口中打开的会话
C-b 数字 直接跳到你按的数字所在的窗口
c-b & 退出当前窗口(个人觉得这个没多大用,因为笔者习惯上c-d退出bash.当然了,如果你确保其它窗口没有有用的程序正在运行,试试这个命令也不错)
C-b d 临时断开会话 断开以后,还可以连上的哟:)
4.分割窗口
vim中,可以直接:!命令,来执行命令,或者直接把命令的结果读到当前的编辑器.很多时候我们就是有这样一种需要,看一下上次的执行结果,而不想通过切换来实现.最初看到官方网站的图片可以,横着分,可以竖着分,挺酷的.不过到现在笔者也还不知道怎么紧着分:)
c-b " 分割出来一个窗口
c-b o 在小窗口中切换 这种方法一次只能切换一次,再想切换再c-b o,适合两个窗口的时候使用.如果在当前窗口分割了好多小窗口的话,就要用下面的两个指令了.
c-b (方向键)上 上一个窗口
c-b (方向键)下 下一个窗口 要指出的是,按一次c-b,可以上上下下的选,直到选到你想要的那个窗口,这点和c-b o不一样噢.
c-b ! 关闭所有小窗口
c-b x 关闭当前光标处的小窗口
5.切换到其它的会话
上面提到的都是窗口的概念,是在一个会话里建立多个窗口,在一个窗口里建立多个小窗口.而现在说是的会话的概念.你每次执行tmux就会新建一个会话,c-b d的时候就会保存退出一个会话.
c-b s 选择attach的会话
注意看哟,和上图显示的不一样
6.修改当前窗口名称
tmux允许你给不同的窗口指定不同的名字
c-b , 修改当前窗口名称
是不是将窗口的名字改成rainbird了?
7.显示一个钟表
其实简单的时候没啥大用处,就是一个屏保的作用,不过你可以通过设置配置文件,使从钟表退出来的时候要输入密码:)
c-b t 钟表
8.查看历史记录
这个是困扰了笔者很长时间的一个功能,因为一些命令执行的时候,显示结果总会超过一屏,而笔者不知道怎么向上翻页以看到前面的东西,直到后来才不经意的发现是用:
C-b pageup/pagedown
退出的话,当然还是用q了
9.复制粘贴:
复制东西在使用GNOME Terminal的时候效果不大明显,因为你可以通过鼠标上下翻页,可以左键选择东西,右键复制或者粘贴.单把这一点拿出来,是为了说明一种猜测和一种高效的移动习惯.在看tmux帮助的时候,笔者注意到,有说按完c-b以后,通过[进入复制模式.但是进来以后呢?界面类似翻看以前的历史记录.研究的许久才这样整明白,如果要使用这个功能,你得知道c-b :可以进入tmux的命令模式,然后可以设置一些指令.比如说,修改模式键setw mode-keys vi.这样你就把当前模式改成了vi.再进入复制模式(c-b [)是不是可以通过j,k在字符里上下移动就像在vim里一样?
通过看帮助,vi和emacs的模式对照表
Function vi emacs
Start of line 0 or ^ C-a
Clear selection Escape C-g
Copy selection Enter M-w
Cursor down j Down
End of line $ C-e
Cursor left h Left
Next page C-f Page down
Next word w M-f
Previous page C-u Page up
Previous word b M-b
Quit mode q Escape
Cursor right l Right
Start selection Space C-Space
Cursor up k Up
你发现什么?我们之前上下翻页用的page up和page down,也可以用上下键.是不是说明了我们这前用的模式就是emacs呢?因为我们如果用ctrl+space选择东西的话,是永远不会成功呢,因为会被系统优先抢占,因为这两个键被定义到了切换输入法.所以,如果你想通过键盘用复制的功能的话,你最好先把模式改成vi,然后通过vi里支持的键选择.空格是选择的起点,然后上下或者左右移动选择到终点,回车,就把内容复制了.这样的一个好处就是你可以复制到不在当前屏幕里的东西!
10.常用参数
最后说一下tmux本身常用的几个参数吧:)
tmux ls 列出已有会话(list-sessions)
tmux a连接到这前断开的会话(attach-session) 默认会连接上图列出的id最小的会话,你也可以指定你想连接到哪个会话:tmux a -t 1来连接到第一个会话
tmux new创建新的会话(new-window) 当然了,不加这个参数也是会创建新会话的:)
关于tmux的介绍到这里就结束了.tmux是个利器,而这个利器是不是也成为你手上的利刃取决于你花多少心思来运用它.以上的一些技巧,你只会一些基本的指令,就可以大大提高工作效率了,还等什么?赶快行动起来吧:)

转载请注明: 转自Rainbird的个人博客
   本文链接: linux下远程管理利器-tmux

Posted in Mac, 未分类 | Tagged , , , , , , | Leave a comment

Python多版本环境管理之pyenv

早先听说python的时候已经是2.x和3.x并存了,据说3.x还不兼容2.x,想着这高版本连自己的旧版本都不兼容,这格局应该也发展不咋地.
时间是把杀猪刀,机器学习这个神奇的东西最终把这门语言再次推向了高潮,最神奇的是连运维都要和机器学习沾边,美其名:AiOps.这不行啊,不学习一下机器学习都跟不上运维的发展趋势了,于是机器学习没学咋地,python倒是比较溜了.
学python一般都系统自带2.7,但对于我这半道入门的选手,实在没必要卡在2.x系列.于是多版本python管理是要玩溜的第一步.今天我们就一起学习一下python处理管理工具
pyenv安装

curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
or
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

设置环境变量:
两种Shell,bash用第一种,我是zsh所以我用第二种

vim ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
$ source ~/.bashrc
或者
$ vi ~/.zshrc:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
然后同样激活上面的配置:
$ source ~/.zshrc

现在我们就可以使用pyenv了:

pyenv versions

  • system (set by /Users/rainbird/.pyenv/version)
    3.7.3
    3.7.5
    3.8.2
    星号表示当前正在使用的Python版本。


    正常应该显示空吧?我上面列出来是我本地使用的版本(看看,都低于3.7吧)

查看所有可安装的Python版本:

pyenv install -l

安装与卸载:

pyenv install 3.7.3 # 安装python3.7.3
pyenv uninstall 3.7.3 # 卸载python3.7.3

设置python版本
对所有的Shell全局有效,会把版本号写入到~/.pyenv/version文件中

pyenv global 3.7.3

只对当前目录有效,会在当前目录创建.python-version文件

pyenv local 3.7.3

只在当前会话有效

pyenv shell 3.7.3

重置版本设置
只有 pyenv shell 和 pyenv local 命令有--unset参数

pyenv shell --unset
pyenv local --unset

常见问题:

  • 下载过慢
    pyenv install执行以后,由于使用下载源码包使用的官方地址,很大概率会卡在第一步的下载,这时候我一般会选择使用sohu源,将源文件下载到pyenv的cache目录,然后再执行pyenv install.
    以3.8.2为例

    export v=3.8.2;wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

  • 各种找不到问题一步解决

    apt-get install build-essential zlib1g-dev libffi-dev libbz2-dev libreadline-dev libssl-dev libsqlite3-dev -y

  • 找不到C编译器
    configure: error: no acceptable C compiler found in $PATH

    apt-get install build-essential -y

  • 找不到zip模块
    zipimport.ZipImportError: can't decompress data; zlib not available

    apt-get install zlib1g-dev -y

  • 找不到ctypes
    ModuleNotFoundError: No module named '_ctypes'

    apt-get install libffi-dev

  • bz2扩展未编译
    WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?

    apt-get install -y libbz2-dev libreadline-dev

  • readline扩展未编译
    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?

    apt-get install -y libbz2-dev libreadline-dev

  • ssl扩展未编译
    ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

    apt-get install libssl-dev -y

  • sqlite3未编译
    WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

    apt-get install libsqlite3-dev -y

Posted in linux, Mac, Python | Tagged , , , , , , , | Leave a comment

python一句话启动http服务


有时候局域网共享个东西不方便,尤其在服务器上的时候,总不能先下载下来,再上传上去吧,于是经常在这台机器用python起个http服务,然后去另一台机器直接访问,一来二去,妥试不爽,特进行一下分享.

python3

python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

python2

python -m SimpleHTTPServer 80
Serving HTTP on 0.0.0.0 port 80 ...

如果是本机访问的话,可以直接在浏览器输入:http://0.0.0.0

那么问题来了,如果是想让其它机器访问怎么办?还要想办法得到自己ip

python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])"
192.168.2.100

所以两句合并的python3版才是我常用的

sudo python -m http.server 80 --bind python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])"
Serving HTTP on 192.168.2.100 port 80 (http://192.168.2.100:80/) ...
192.168.2.100 - - [18/Mar/2020 20:20:18] "GET / HTTP/1.1" 200 -
192.168.2.100 - - [18/Mar/2020 20:20:19] code 404, message File not found
192.168.2.100 - - [18/Mar/2020 20:20:19] "GET /favicon.ico HTTP/1.1" 404 -

that's all

转载请注明: 转自Rainbird的个人博客
   本文链接: python一句话启动http服务

Posted in Mac, 未分类 | Tagged , , , , , , | 1 Comment

资讯:GitHub正式发布移动端App

几个得值‬‬关注的功能特性:

  1. 通过动滑‬‬来快速处理目项‬‬任务
  2. 添加 emoji 支持,便方‬‬用户好更‬‬的互动
  3. 支持合并 pull requests,查阅码代‬‬等常用操作
  4. 适配 iOS 的暗黑模式

‬‬地址:https://github.com/mobile
iOS:https://apps.apple.com/us/app/github/id1477376905?ls=1
Android:https://play.google.com/store/apps/details?id=com.github.android

Posted in 随笔 | Tagged , , , | Leave a comment

mac下使用proxychains实现代理

介绍
proxychains - a tool that forces any TCP connection made by any given application to follow through proxy like TOR or any other SOCKS4, SOCKS5 or HTTP(S) proxy. Supported auth-types: "user/pass" for SOCKS4/5, "basic" for HTTP.
翻译一下:就是一个强制你的tcp连接使用代理的工具,支持socks4,socks5并且socks4/5支持用户名和密码的方式,http支持basic验证.之前发过一篇<<mac系统配置socks5转http代理>> 是用的转换工具,使用的时候,再配置上代理.而用这个工具的话,配置一次,用的时候就不用再操作了,比较方便

安装

其它平台叫proxychains,在OSX下叫proxychains-ng

brew install proxychains-ng
==> Downloading https://homebrew.bintray.com/bottles/proxychains-ng-4.14.catalina.bottle.tar.gz
######################################################################## 100.0%
==> Pouring proxychains-ng-4.14.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/proxychains-ng/4.14: 9 files, 87.5KB

配置

最后一行添加
vi /usr/local/etc/proxychains.conf
socks5 127.0.0.1 1080

使用

proxychains4 curl google.com
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.14/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  google.com:80  ...  OK

301 Moved

301 Moved

The document has moved here.

其它如wget,curl如法泡制,前面加proxychains4即可

Posted in Mac | Tagged , , , , , , , | 1 Comment

微信PC版本收藏

软件介绍

微信电脑版官方下载,微信是腾讯旗下的一款跨平台的通讯工具。支持单人、多人参与。通过手机网络发送语音、图片、视频和文字。

  • 系统 | Windows
  • 分类 | 聊天工具
  • 语言 | 中文
  • 授权 | 免费软件
  • 作者 | 腾讯软件
  • 官网 | https://pc.weixin.qq.com/

免责

收集,整理自网络,版权归原作所有

列表

2.9

日期 版本
2020.03.26 2.9.0_Beta
官方下载 点击下载
百度网盘 待上传

2.8

日期 版本
2020.03.07 2.8.0.133
观飞下载 点击下载
百度网盘 待上传
日期 版本
2020.03.03 2.8.0.121
观飞下载 点击下载
应用宝 点击下载
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2020.03.03 2.8.0.116
观飞下载 点击下载
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2020.03.02 2.8.0.112
观飞下载 点击下载
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2020-03-02 2.8.0.106
观飞下载 点击下载
百度网盘 待上传

2.7

日期 版本
2020-02-28 2.7.1.88
观飞下载 点击下载
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2019-11-05 2.7.1.85
微信官方下载 点击下载
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2019-10-21 2.7.1.82
微信官方下载 点击下载
蓝奏云 点击下载
蓝奏云2 点击下载
百度网盘 待上传

2.6

日期 版本
2019-xx-xx 2.6.8.65
百度网盘 待上传
日期 版本
2019-xx-xx 2.6.8.52
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2019-xx-xx 2.6.8.51
蓝奏云 点击下载
百度网盘 待上传
日期 版本
2019-xx-xx 2.6.7.57
微信官方下载 点击下载
百度网盘 待上传
日期 版本
2019-xx-xx 2.6.6.28
蓝奏云 点击下载
百度网盘 待上传

2.5

日期 版本
2017-12-03 2.5.0.67
蓝奏云1 点击下载
蓝奏云2 点击下载
百度网盘 待上传

转载请注明: 转自Rainbird的个人博客
   本文链接: 微信PC版本收藏

Posted in windows | Tagged , , , , , , , , , , | Leave a comment

mac系统配置socks5转http代理

命令行下,访问一些资源不方便,需要转换一下,办法很多,像privoxy,polipo,proxychains等,今天我们研究privoxy

安装privoxy

brew install privoxy

=> Auto-updated Homebrew!
Updated 2 taps (homebrew/cask and homebrew/services).

==> Installing dependencies for privoxy: pcre
==> Installing privoxy dependency: pcre
==> Downloading https://homebrew.bintray.com/bottles/pcre-8.43.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/35/3517eab75bf5bdb7798414d0af2aaaaf43edd248abc960b008d89b0a0958d537?__gda__=exp=1584257346~hmac=8
######################################################################## 100.0%
==> Pouring pcre-8.43.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/pcre/8.43: 204 files, 5.5MB
==> Installing privoxy
==> Downloading https://homebrew.bintray.com/bottles/privoxy-3.0.28.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/27/27fe56112d9fda97417f830b4c17a5066b4389f7831db250a702c91d8df62131?__gda__=exp=1584257358~hmac=a
######################################################################## 100.0%
==> Pouring privoxy-3.0.28.catalina.bottle.tar.gz
==> Caveats
To have launchd start privoxy now and restart at login:
  brew services start privoxy
Or, if you don't want/need a background service you can just run:
  privoxy /usr/local/etc/privoxy/config
==> Summary
🍺  /usr/local/Cellar/privoxy/3.0.28: 98 files, 2MB
==> brew cleanup has not been run in 30 days, running now...
Removing: /Users/rainbird/Library/Logs/Homebrew/mysql-client... (64B)
Removing: /Users/rainbird/Library/Logs/Homebrew/mysql-connector-c... (64B)
Removing: /Users/rainbird/Library/Logs/Homebrew/mysql@5.7... (64B)
Removing: /Users/rainbird/Library/Logs/Homebrew/openssl... (64B)
Pruned 1 symbolic links and 4 directories from /usr/local
==> Caveats
==> privoxy
To have launchd start privoxy now and restart at login:
  brew services start privoxy
Or, if you don't want/need a background service you can just run:
  privoxy /usr/local/etc/privoxy/config

配置 privoxy

vi /usr/local/etc/privoxy/config
找到
listen-address  127.0.0.1:8118
取消注释并添加
forward-socks5 / 127.0.0.1:1080 .

127.0.0.1:1080 socks5代理地址及端口
127.0.0.1:8118 转换后http的地址及端口

运行privoxy

只运行一次
privoxy /usr/local/etc/privoxy/config
以服务方式运行:
brew services start privoxy

bash使用使用http代理

export http_proxy="http://127.0.0.1:8118"
export https_proxy=$http_proxy
curl xxx.com
或者
http_proxy="http://127.0.0.1:8118" curl google.com

其它示例
git使用

#全局设置http或https代理
git config --global http.proxy http://127.0.0.1:8118
git config --global https.proxy http://127.0.0.1:8118
#取消代理:
git config --global --unset http.proxy
git config --global --unset https.proxy
#临时使用,可以使用-c参数:
git -c https.proxy=http://127.0.0.1:8118 clone --depth=1 https://github.com/xxx/xxx

that's all

Posted in linux | Tagged , , , , , , , , | Leave a comment

WordPress启用https配置

随着移动互联网的发展,尤其以iPhone一枝独秀,强力推动https的落地,加之一些证书提供商的推波助澜,当下如果一个小站不支持https是个大跌眼睛的事件.说说小站启用https的过程

证书申请

这段故事比较长,参见<<基于certbot-auto申请免费https证书>>.

nginx配置启用https

server {
    listen 80;
    listen 443 ssl;
    server_name blog.cnrainbird.com;
    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }
    ssl_certificate /etc/letsencrypt/live/blog.cnrainbird.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.cnrainbird.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

WordPress后台启用

登陆后台->设置->常规

这个地方决定了,整个站点里的相互引用域名
然后页面最下方,保存更改
这地方我操作完以后,chrome直接罢工了,提示重定向次数过多,类似

重定向次数过多解决

在网站根目录找到wp-config.php
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
开头加入以上代码即可

that's all

转载请注明: 转自Rainbird的个人博客
   本文链接: WordPress启用https配置

Posted in 随笔 | Tagged , , , , | Leave a comment

certbot-auto免费申请Let’s Encrypt的https证书

听同事说,Let's Encrypt支持免费的通配符证书了,这是个好东西.之前弄免费证书,一直用阿里云的,一年一次,只能一个域名.这个泛域名证书虽然90天,申请一次,但是强在可以自动申请,话不多说,开工

下载 certbot

mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod 755 certbot-auto

申请泛域名证书

./certbot-auto certonly  \
-d '*.cnrainbird.com' \
--manual \
--preferred-challenges dns-01  \
--server https://acme-v02.api.letsencrypt.org/directory

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for cnrainbird.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.cnrainbird.com with the following value:

J5FTanSZjRl3P63LVdQqZG5fZ2n6n8vMRPVq8xv0r7Q

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

注意,此处要去dns域名提供商添加txt记录
各家大同小异吧,我用的dnspod

添加完成后,记得验证一下

nslookup -type=txt _acme-challenge.cnrainbird.com
Server:         139.162.16.5
Address:        139.162.16.5#53

Non-authoritative answer:
_acme-challenge.cnrainbird.com  text = "J5FTanSZjRl3P63LVdQqZG5fZ2n6n8vMRPVq8xv0r7Q"

Authoritative answers can be found from:
cnrainbird.com  nameserver = f1g1ns1.dnspod.net.
cnrainbird.com  nameserver = f1g1ns2.dnspod.net.

一般新加记录,无需太长等待,一两分钟即可.如上面能得到text的返回说明添加成功. 可以去前面的窗口,Press Enter to Continue回车继续了


IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/cnrainbird.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/cnrainbird.com/privkey.pem
   Your cert will expire on 2020-06-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
  "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

如上,成功申请通配符证书,过期时间是90天后
证书文件存放
/etc/letsencrypt/live/cnrainbird.com/fullchain.pem
/etc/letsencrypt/live/cnrainbird.com/privkey.pem
有一个地方是需要注意的,*.cnrainbird.com这个证书并不包含主域cnrainbird.com.所以,我们还需要单独申请一次cnrainbird.com的证书

申请主域名证书

申请泛域名证书,我们使用的是手动+dns的方式
申请主域证书, 我们使用自动认证的方式,此处要注意:/opt/certbot是,网站默认网站路径,即,直接输入ip,访问到的目录

./certbot-auto certonly \
--preferred-challenges http \
-d cnrainbird.com \
--webroot -w /opt/certbot

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for cnrainbird.com
Using the webroot path /opt/certbot for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/cnrainbird.com-0001/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/cnrainbird.com-0001/privkey.pem
   Your cert will expire on 2020-06-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

全程自动进行,无需参与,得到主域证书
/etc/letsencrypt/live/cnrainbird.com-0001/fullchain.pem
/etc/letsencrypt/live/cnrainbird.com-0001/privkey.pem

生成 dhparams

使用 openssl 工具生成 dhparams

openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

Nginx配置

blog.cnrainbird.com.conf配置:

server {
    server_name blog.cnrainbird.com;
    listen 443;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/cnrainbird.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cnrainbird.com/privkey.pem;
    ssl_dhparam /etc/ssl/certs/dhparams.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "EECDH+CHACHA20 EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
}

然后重启 nginx 服务就可以了

/etc/init.d/nginx reload
[ ok ] Reloading nginx configuration (via systemctl): nginx.service.

强制跳转 https

既然证书都有了,对于默认http的访问,我们进行一次301跳转

server {
    server_name blog.cnrainbird.com;
    listen 80;
    return 301 https://$server_name$request_uri;
}

证书更新

这个比较简单

./certbot-auto renew

就可以更新全部域名
当然也可以更新指定域名

./certbot-auto renew -d cnrainbird.com

crontab里加个计划任务好了

#每两个月更新一次
45 2 */2 * * cd /opt/certbot&& ./certbot-auto renew && /etc/init.d/nginx reload

Safair效果

Posted in linux | Tagged , , , , , , , , | Leave a comment

假装回来了

看上一篇博客的发布时间,已经是五年前了,时光飞逝,忙碌的五年
这五年经验不少变化,互联网技术也有了飞速的发展,五年前nodejs大火,后来微服务的大潮中风声水起,紧接着devops,k8s.而我作为一个互联网从业者,也眼见着这些故事发生,当然也紧跟时代的步伐.
五年下来,自己在nodejs,微服务,k8s,python这些方面也有了一些小进步,未来准备在这些方面记录一些点滴.

转载请注明: 转自Rainbird的个人博客
   本文链接: 假装回来了

Posted in 随笔 | Leave a comment