使用GnuPG加密文件

GnuPG加密情景

42想發送一條消息給55,並且這條消息只有55能看到。首先42和55都用GnuPG生成自己的公鑰和私鑰。然後55把公鑰交給42,公鑰怎麼傳遞都行,不需要保密。42使用自己的私鑰和55的公鑰來把消息加密,生成加密的消息發給55。55拿到加密的消息後用自己的私鑰解密即可看到原始消息。

安卓使用OpenKeychain

F-Droid或Google Play下載OpenKeychain,導入已有證書(公鑰私鑰均可導入)或生成新的證書。然後通過二維碼或你喜歡的其他方式分享公鑰。發送者使用接收者的公鑰和自己的私鑰加密文件,然後發送加密文件給接收者,接收者用自己的私鑰解開文件。使用OpenKeychain,不僅可以方便的加密與解密文件和文本,更可與K-9 Mail搭配實現加密的郵件。

命令行使用GnuPG

Fedora似乎時預裝了GnuPG和GnuPG2,我們可以用gpg和gpg2來使用它。Termux可以使用pkg install gunpg,用法是一樣的,而且版本是最新版。Fedora26比最新版還差一個小版本。我樂於追新,所以這裡都用gpg2。順便提一下,GnuPG念做“格努皮即”。關於GNU有興趣的朋友可以到GNU作業系統與自由軟體運動了解下。

##生成一對密鑰
gpg2 --full-generate-key
#密鑰種類默認RSA和RSA即可
#RSA密鑰長度默認2048即可
#過期日期默認0即永久,後面會講撤銷方法
#繼續輸入名字、郵箱和注釋
#然後就開始生成密鑰了,這時可以做些移動鼠標敲擊鍵盤的動作幫助程序獲取隨機數
#Termux可能要一兩分鐘,Fedora貌似20秒就搞定了
##導入導出刪除撤銷密鑰
#列出已有的密鑰
gpg2 --list-keys
#列出密鑰的指紋
gpg2 --fingerprint
#為密鑰生成撤銷證書
gpg2 --gen-revoke fred42 > revoke_fred42.txt
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export -a fred42 > public.key
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export-secret-key fred42 > private.key
#導入一把密鑰
gpg2 --import public.key
#刪除一把公鑰
gpg2 --delete-key fred42
#刪除一把私鑰
gpg2 --delete-secret-key fred42
##使用密鑰服務器上傳搜索與下載公鑰
#Please blame the wall

我的公鑰指紋:E7F7 D0FE C38C 3975 67AA 3FC1 1168 09F0 24AF 514A和公鑰:

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFs9g5gBCADaGfBtFMSsNeGDhej021SuvCWOQUFbLnBxkNUIuolcy564AlA6
AqX4R/HC286Yy3Si4m4bJsNjDQASl79sE99DBi4nL66gko6R+5/o62b/QfuZ0R1N
sUGHNSyfzM65zqTeAcow7ukzRe67q1fMDKMr1/R4uXlpXhTMmVJ9mTvO8zy7hX7B
NT77wdLIP2m/ywI2l2LmeoQMkxzKNWwDa8I1OY36NLrpWd4F4vVIg3MMwazMeHGe
CkWMq60oEkfcy/VSiVxF+4XTv97IZ7/xSi+NzNvt56AJr/VbSMvIyQLkNtIotH4A
3+l3h9ckFwhUr+0DgLzoLWLc0BV215zSYu+hABEBAAG0JmZyZWQ0MiAoRnJlZCBa
ZW5nKSA8aW5uZXI0MkBnbWFpbC5jb20+iQFOBBMBCAA4FiEE5/fQ/sOMOXVnqj/B
EWgJ8CSvUUoFAls9g5gCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQEWgJ
8CSvUUohnQgAoXrDgRKN4+NLmX3o2Jlr89TzfgTnS5mr/COEOBQX60rk6AGhXRN6
xH7TXz8DW84JjgWHl5GHuso2qlsdl565KjzaisV3KyVdD/f4wZae2uDnnzkrmQcR
SuusV1iqWaNdArOEi1WC5MDsfCVP8ulILI8rK6YAOwp6Fj/5BGBm2V9gSfjB3eat
WaSoDTeCwoHVcpXtBbFZ8wDiy9IfW9YT7HPmIhwn+pevE6QfBLDseajklvSNgupR
1dp/mXTSlbcTqVMn1hR4yByeiFF5MXakPF0O9bSQLwx0RkybLUychcjoecmT3iIZ
Xm2PCaic3j/XwXsqbsqL5OxoCi3B6Fyrk7kBDQRbPYOYAQgAq73LJIbu24l73zLF
XQfH8XVuRCe94qjKuNYdaJRqd3FJqkNFnIJG1E2hhaXj2z869QNsqcRUXr0R0y6k
vayRZLWQhn/jM99kuCioRKt2X8eak+M8kGip94jaqwNpJbiJa2iJjCnMEgTC/6Cm
R8q37m3/EjIMRRVUFxezkZWWNWo3qklIcPatc92aCOEu3ztZ/xvF/E93CDRl//+p
FPLdO8ba/iVcJszQp8S6opRu8moTz6qEzA70hldv0IZC1/syWAjliFBa9P8Xpq5e
cEoGvaBPgXG6MENeI8j5sv8m9abtHtmZZtGt2MyVKNAbz30cJ8t2k6+fG1Jl3W3q
gi31NQARAQABiQE2BBgBCAAgFiEE5/fQ/sOMOXVnqj/BEWgJ8CSvUUoFAls9g5gC
GwwACgkQEWgJ8CSvUUqY0QgAm3ldNHrdv1LIhP/J3WJgqlWK4/aW4p/hgtfJSlje
2N9Kgs5CeBdW3m9AdgGQNfpmXPDaRM5EaaNo87QH6z8BLfxtCltEhmiMfy1CjEG3
Hu/gPcQ+thwHQwH+7ejmafQAGmljDgjyB+ZMUej2nwLagh2uGhsls/xGI2EJxw8l
W/Gk8sh3Fqir2mqoK4/OcFzdvo4MhoT2m8zjEH3OVTjyNzekL5FNLhb61RL2aAsV
mgA7d0YXIh/OJ9dEVMLy7xr0eP+UD7Mr/zJjX18+egDjdfMAfM7XERyq9OPiCdpt
v67laBzdE3m99lgFkqwap9O6lzIdV06LPx6oXZzpbJq9ww==
=vA+d
-----END PGP PUBLIC KEY BLOCK-----

使用GnuPG生成隨機密碼

生成一個16位的隨機密碼

gpg2 --gen-random -a 0 16 | head -c 16

也可將下面代碼存為password.sh,運行./password.sh 16來獲得。

#!/bin/bash
if [ $# -eq 0 ]
then echo "請指定待生成密碼的長度"
else gpg2 --gen-random -a 0 $1 | head -c $1
echo ""
fi

使用ExifTool處理文件元數據

ExifTool是一款由Phil Harvey開發的獨立於平台的命令行工具,用於處理文件的元數據,例如照片的拍攝日期等。Fedora可以通過下面命令安裝使用。

#安裝ExifTool
sudo dnf install perl-Image-ExifTool
#把DIR文件夾中的文件的拍攝日期增加4小時
exiftool "-DateTimeOriginal+=4" DIR
# -overwrite_original 可不產生.JPG_original原始文件
#修改後會產生.JPG_original原始文件,新文件較原始文件小是因為ExifTool壓縮了Exif信息
#如果修改日期有誤,可以通過這個命令恢復圖片原始文件
for file in *.JPG_original;do mv "$file" "$(basename "$file" .JPG_original).JPG"; done
#Linux重命名DIR文件夾中的名字為拍攝日期
exiftool -overwrite_original -d %y%m%d_%H%M%S%%-c.%%e "-filename<DateTimeOriginal" DIR
#Windows重命名DIR文件夾中的名字為拍攝日期
"D:\Program Files\portable\exiftool.exe" -d %y%m%d_%H%M%S%%-c.%%e "-filename<DateTimeOriginal" E:\Image\DIR

開放街圖與MAPS.ME

OpenStreetMap是由製圖者社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。地方知識、社群推動、開放資料是它的特點。得益於社群推動,OpenStreetMap很可能擁有更新更準確的資訊,這點我在深圳、香港、日本、意大利旅行時有深切的感受。如果沒有OpenStreetMap我的多數旅行都不可能那麼順利而有趣!有興趣參與的朋友可以參考learnOSM的教程。

MAPS.ME是一款開源的離線地圖應用,地圖數據來自OpenStreetMap。有蘋果版和安卓版供下載。由於OpenStreetMap並不提供移動客戶端,所以我之前都是使用MAPS.ME,預先將目的地的地圖下載好就可以使用了。它提供的路徑規劃功能雖不能說完美,但是已經很不錯了,步行和騎行路徑還有海拔變化,對於行山真的很有用。MAPS.ME提供了簡單的添加地點的功能,登入OpenStreetMap賬號即可為OpenStreetMap作貢獻,不過如果想專業地添加地理資訊,還是通過網頁版OpenStreetMap來操作比較好。

Maps是MAPS.ME的一個複製,在原版的基礎上添加了路徑追蹤和自定義書籤功能。

ShareX

今天SpaceX成功發射了一架運載力達到63噸(63噸是近地軌道LEO,如果是地球同步轉移軌道GTO則為27噸,而發往火星的話是16噸)的火箭Falcon Heavy。但我今天介紹的卻是Windows下一款很好用的截屏軟件ShareX。ShareX好處有很多,我看中的有開源、免費、無廣告、輕量。雖然它還有強大的截屏分享、錄製gif等功能,但我並未用到。

安裝後在「快捷動作」中可以設置自己喜歡的快捷按鍵來觸發截屏。在「截圖後動作」中我選擇了打開圖像編輯器和圖像複製到剪切版。「任務設置」中取消了截圖後聲音提示。這樣就能愉快的使用了!

在centos6上裝Synapse

裝了Matrix家的Synapse就可以使用Riot.im聊天了,好處是服務器是自己的,客戶端是開源的。

首先跟着官方文檔,安裝依賴。此時需要注意centos6自帶的sqlite版本太低,而且插件FTS4也未啟用。參考Install Python and Sqlite from Source安裝sqlite和python2.7即可。

#安裝sqlite3.12並開啟FTS4
mkdir -p ~/tmp/compile&&mkdir ~/tmp/opt&&cd ~/tmp/compile
wget https://www.sqlite.org/2016/sqlite-autoconf-3120200.tar.gz
tar xf ./sqlite-autoconf-3120200.tar.gz
cd sqlite-autoconf-3120200
./configure --prefix=~/opt/sqlite/sqlite3 --disable-static --enable-fts5 --enable-json1 CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_RTREE=1"
make
make install
mkdir ~/bin
ln -s ~/opt/sqlite/sqlite3/bin/sqlite3 ~/bin/sqlite
#到這裡就安裝好了,執行sqlite即可看到版本為3.12
#執行pragma compile_options;可見FTS4已開啟
#.quit退出sqlite
#安裝使用sqlite3.12的python2.7
wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
xz -d Python-2.7.14.tar.xz&&tar -xvf Python-2.7.14.tar
cd Python-2.7.14
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib ./configure LDFLAGS="-L$HOME/opt/sqlite/sqlite3/lib" CPPFLAGS="-I $HOME/opt/sqlite/sqlite3/include"
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib make
LD_RUN_PATH=$HOME/opt/sqlite/sqlite3/lib make install

使用virtualenv生成一個Synapse專用的虛擬環境。安裝Synapse時還會遇到Twisted版本過低,在虛擬環境下這樣操作一下:

wget https://twistedmatrix.com/Releases/Twisted/17.1/Twisted-17.1.0.tar.bz2
tar -jxvf Twisted-17.1.0.tar.bz2
cd Twisted-17.1.0
python setup.py install 
cd ..

配置nginx前置代理的時候,用letsencrypt的centbot各種失敗,最後還是用回ssl for free的笨方法。推薦使用letsencrypt的centbot,配好後非常省時省力。順便貼一下nginx配置:

server {
    listen 443 ssl;
    server_name YOURDOMIN;

    ssl_certificate     /etc/letsencrypt/live/YOURDOMIN/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/YOURDOMIN/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location /_matrix {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

由於使用了nginx做代理,所以8008端口的監聽範圍可以在homeserver.yaml中改成127.0.0.1。

最後跟着官方教程增加用戶,然後在Riot.im里勾上自定義服務器就可以聊天了。也可以參考下Run your end-to-end encrypted chat server using Matrix and Riot

Android我從F-droid下載的客戶端,沒有gcm,所以在後台時檢查消息的頻率可以自行設置,我設置的5分鐘,默認10分鐘。網頁端打開的時候有一點點慢,打開後就沒問題了。Fedora可以安裝taw/Riot的源,即

sudo dnf copr enable taw/Riot 
sudo dnf install -y riot --refresh

Synapse搬家

官方文檔並未給出具體備份與還原方法,經過摸索發現非常簡單。如果是按照我上面步驟安裝的,只需再新服務器上搭建好環境,然後複製如下文件到虛擬環境中就可以啟動了。

homeserver.yaml
YOURDOMIN.log.config   
YOURDOMIN.signing.key  
YOURDOMIN.tls.crt
YOURDOMIN.tls.dh
YOURDOMIN.tls.key
media_store
homeserver.db

Synapse重置用戶密碼

參考:reset password for matrix/synapse accounts

ssh connecting

記錄下ssh連接服務器的幾種方式:

linux to linux

直接打開終端,以帳號密碼方式登錄,如下:

ssh -l root -p 2016 123.159.181.162

如果厭倦了每次都要輸密碼,可以通過證書方式登錄,還能增加安全性。設置方法可以參考SSH Passwordless Login Using SSH Keygen in 5 Easy StepsSSH/OpenSSH/Keys,寫的很詳細。

還是不犯懶大概抄寫一下:

#本地,如果你沒有公鑰文檔~/.ssh/id_rsa.pub,就用如下命令生成一個
ssh-keygen -t rsa
#遠程,如果沒有ssh文件夾,則創建一個
mkdir -p .ssh
#本地,把本地id_rsa.pub添加到.ssh/authorized_keys文檔中,如
cat .ssh/id_rsa.pub | ssh user@remoteServer 'cat >> .ssh/authorized_keys'
#遠程,檢查文檔權限,如果不是,則改為
chmod 700 .ssh
chmod 640 .ssh/authorized_keys
#完成

android to linux

ConnectBot是一款簡單、強大、開放原始碼的SSH用戶端。增強鍵盤中方向鍵和Ctrl、Tab等鍵用起來很方便。而且它還能連local,就當作一個本地的Terminal了。

另一個選擇是JuiceSSH。其實呢從個方面(更強大的鍵盤和更便利的剪切板操作)我都覺得JuiceSSH比ConnectBot厲害,但是我還是要在一開始推薦一下開源軟件。

Termux是安卓下的另一個選擇,它不僅可以作為ssh client還可以作為ssh server哦。Termux的sshd端口為8022,只能通過密鑰登錄。

windows to linux

其實比putty厲害的軟件也有很多,但我只用過putty。

ios to linux

能用錢解決的問題都不是問題?

Spy Monitor

Spy Monitor是個很有用的安卓應用,可以查看當前手機的網絡連接,並且不需要root權限。地圖模式下,顯示與當前手機有連接的遠程服務器所在地,可以看到微信有時在深圳,有時在上海,OperaMini的服務器確實是在中國,但OperaMoile則在冰島等等,挺有意思的。右邊列表模式能查看當前的活動鏈接以及鏈接的詳細,咦,我已經把"冰箱"用XPrivacy禁用了網絡,怎麼還有鏈接,而且還是連到ASHBURN, US,看來要去檢查下。

centos下可以用nethogs查看當前網絡鏈接。

windows下可以用NetWorx中的端口狀態查看當前網絡鏈接。