發表文章

目前顯示的是 2024的文章

使用金鑰檔案進行自動解鎖 LUKS 加密磁區 on Ubuntu

注意事項 該硬碟會在該電腦自動解鎖,所以電腦登入帳號密碼要保管好 別台電腦沒設定過的,一樣要使用密碼 環境 作業系統:Ubuntu 24 目標 讓系統快照備份軟體 timeshift 可以在電腦重開機後,即可存取加密的備份硬碟 首先,生成一個密鑰檔案來代替手動輸入的密碼 sudo dd if=/dev/urandom of=/root/.luks-key bs=4096 count=1 設置密鑰檔案的權限,只能被 root 用戶讀取 sudo chmod 600 /root/.luks-key 將這個密鑰檔案添加到 LUKS 加密磁區 ( sdX 應替換為實際的 LUKS 加密磁區裝置名稱(例如 /dev/sda2 )) sudo cryptsetup luksAddKey /dev/sdX /root/.luks-key 查詢加密裝置的 UUID,等一下要使用 sudo blkid /dev/sdX 編輯 /etc/crypttab 文件 sudo nano /etc/crypttab 加入以下文字,告訴系統在開機時自動解鎖磁區 ( luks_device_name 是加密裝置的名稱,可以取自己想要的名稱, YOUR-DEVICE-UUID 是剛剛查詢到的 UUID) luks_device_name UUID=YOUR-DEVICE-UUID /root/.luks-key luks 更新 initramfs 讓變更生效 sudo update-initramfs -u 重開機,檢查加密磁區是否在開機時自動解鎖 sudo reboot

Ubuntu 24 上安裝 Docker 官方來源的 Docker

更新系統套件 sudo apt update sudo apt upgrade -y 移除舊版 Docker(若已安裝) sudo apt install -y ca-certificates curl gnupg 安裝套件允許使用 HTTPS 傳輸,及 GPG 金鑰 sudo apt install -y ca-certificates curl gnupg 新增 Docker 的官方 GPG 金鑰 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg 設定 Docker 的下載點 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 安裝 Docker Engine 、docker compose 和相關套件 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 確認是否已安裝 Docker sudo docker --version 應該要看到類似這樣 Docker version 27.4.0, build bde2b89 試試執行 Docker sudo docker run --rm hello-world 應該要看到類似這樣 Hello from Docker! This mess...

如何加入使用者的 ssh 金鑰到 ubuntu 伺服器

注意事項 金鑰名稱可保持 id_rsa.開頭,eg. "id_rsa.target_device",以後使用上比較直覺 -C: 註解基本上人物是必需,至少知道是誰的金鑰,伺服器管理員好管理。也可以視情況加入是哪一台電腦、在哪一個位置等等 環境 自己電腦:MacOS 14.4.1 伺服器電腦:Ubuntu 24 查詢自己電腦是否已有金鑰 ls -alt ~/.ssh 如果看到 id_rsa 和 id_rsa.pub 這兩個檔為一組,則表示已存在至少一組金鑰。pub是公鑰,另一個是私鑰。 沒有金鑰的,要先產出一組 ssh-keygen -t rsa -b 4096 \ -f ~/.ssh/YOUR_ID_RSA_FILE_NAME \ -C "your_email@example.com" -f: 設定要產出金鑰的檔案位置跟檔名 -C: 該公鑰文件裡最後面會留下的註解,至少要方便辨別是哪位使用者的 接下來要輸入你想設定的密碼。以後方便不用打密碼的話,直接 Enter Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): 這樣就有一組金鑰了 把剛產出的公鑰加入到伺服器未來要登入的帳號 如果你的伺服器支援 ssh-copy-id,這是最簡單的方法: ssh-copy-id -i ~/.ssh/YOUR_ID_RSA_FILE_NAME.pub -p 22 \ YOUR_SERVER_ACCOUNT@SERVER_IP_OR_ADDRESS -i: 要上傳的檔案來源位置 -p: 伺服器監聽的 ssh port,預設是 22 輸入遠端電腦帳號的密碼,正確的話會長類似這樣: Number of key(s) added: 1 Now try logging into the machine, with: "ssh -i ~/.ssh/YOUR_ID_RSA_FILE_NAME -p 22 'YOUR_SERVER_ACCOUNT@SERVER_IP_OR_ADDRESS...

解決 Docker 官方的 MySQL 8 執行 INSERT 超級慢的問題

原本 insert 20 筆資料會耗時 1秒,改完後,insert 500 筆不到 0.1 秒! 注意事項 雖然以下不會執行sql語法,但動到資料庫參數,要確認隨時可以回復到可用狀態。 如果已有 my.cnf 檔,就建立另一個檔 環境 官方的 MySQL 8.4 Docker image ( FROM mysql:8 ) 解法 加入一個自定義 my.cnf 檔在 /etc/mysql/conf.d/ ,內容: [mysqld] # 通常設定為系統 RAM 的 60-80%。這裡數值約16G innodb_buffer_pool_size = 17089934592 # 增大此緩衝區可以提高寫入性能,特別是在處理大量寫入時,會減少磁碟寫入的頻率。 # 這裡數值約256MB innodb_log_buffer_size = 268217728 # 是否在每個事務提交後同步二進制日誌(Binary Log)。 # 設置為 1 會增加每個事務的成本,設為 0 或 100 可以提高寫入性能。 sync_binlog = 0 # 事務提交時,何時將日誌寫入磁碟的選項。設為 0 可以減少事務提交的 I/O 負擔, # 但會犧牲持久性,可能遺失最近 1 秒內的事務記錄。 innodb_flush_log_at_trx_commit = 0 # 停用二進制日誌(Binary Log) skip-log-bin = 0   References ChatGPT 解决连接Docker mysql容器慢的问题 MySQL 8.0 执行 insert 插入数据非常缓慢的问题及解决方法   以下僅為測試數據 用以下參數,insert 500 筆的時間: 0 分 10.40642 秒 [mysqld] innodb_buffer_pool_size = 17089934592 innodb_log_buffer_size = 268217728 # sync_binlog = 0 innodb_flush_log_at_trx_commit = 0 skip-log-bin = 0 用以下參數,insert 500 筆的時間:...

取得小米藍牙裝置 bindkey 加密金鑰 綁定碼

   注意事項 要取得小米藍牙裝置的 bindkey 加密金鑰 綁定碼 台灣用戶的 Server 是 sg 環境 作業系統: MacOS 12.7 取得小米裝置資訊 curl -L -O https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor/releases/latest/download/token_extractor.zip # 解壓縮 unzip token_extractor.zip # 進入已解壓縮的資料夾 cd token_extractor # 安裝該程式所需套件 pip3 install -r requirements.txt # 執行該程式 python3 token_extractor.py # 輸入小米帳號 # 再來輸入小米密碼 # Server 打 sg # 就會列出該帳號有的所有裝置 # 欄位 BLE KEY 就是 bindkey 加密金鑰 來源:https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor#manual-run-in-python

免 sudo、免密碼終端機執行 docker 跟 docker-compose 指令

解決執行 docker 跟 docker-compose 要打 sudo 並且輸入密碼才可以執行的麻煩 注意事項 安全性會降低 此文的 Docker 是透過 snap 安裝 環境 作業系統:Ubuntu 24 確認 Docker 服務是否正在執行 snap services docker # inactive 的話,就啟動它 sudo snap start docker 或是 sudo systemctl status snap.docker.dockerd.service # inactive 的話,就啟動它 sudo systemctl start snap.docker.dockerd.service 檢查 docker 群組是否存在 cat /etc/group | grep docker # 有的話會看起來類似這樣 # docker:x:1001:{your_account} 輸出是空的話,建立該群組。對,就是建一個 docker 群組 sudo groupadd docker 檢查你是否在 docker 群組中 groups $USER # 看起來類似這樣 # {your_account} : group1 adm cdrom sudo dip plugdev users lpadmin docker 此指令也可以看 id $USER 如果沒有 docker 字樣出現的話,把你加入 sudo usermod -aG docker $USER 立即生效 newgrp docker 確認是否不需 sudo 可正常執行 docker ps

如何產生客戶端用的 ovpn 檔

注意事項 已有 OpenVPN server、ca.key 用戶端在使用此憑證時無需輸入密碼 固定 IP ,已經定好的檔名,後續不可修改   先在 server 生成憑證、密鑰和配置 $ ssh {your_server} $ sudo docker run \ -v /volume1/docker/tun/etc:/etc/openvpn \ --rm -it kylemanna/openvpn \ easyrsa build-client-full {your_file_name} nopass # 原 /etc/openvpn/ 的檔已存在 /volume1/docker/tun/etc 裡了,所以這裡要輸入ca.key的密碼 Enter pass phrase for /etc/openvpn/pki/private/ca.key:   成功應該要出現這些訊息: Enter pass phrase for /etc/openvpn/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'{your_file_name}' Certificate is to be certified until Mar 9 01:15:10 2026 GMT (825 days) Write out database with 1 new entries Data Base Updated _________________ 以上會生成三個檔, pki/issued/{your_file_name}.crt、pki/private/{your_file_name}.key、pki/reqs/{your_file_name}.req    設該 ovpn 設定檔的固定 IP $ sudo docker exec -it {your_container_name} /bin/bash $ cd /e...

Synology Drive 分享連結網址如何自動加上 port

圖片
解決 Synology Drive 在分享時,沒有出現有效的連結可以直接複製。 版本: DiskStation Manager 7.1.1 (DSM) 照圖上做修改 分享連結就會出現設定的url了

如何修復 PyCharm 的 "Cannot Save Settings: Please specify a different SDK name" 錯誤

圖片
 錯誤訊息: 解決步驟: 全部清除,再按 OK 再加上自己需要的版本後,就可以正常儲存。

關掉 RPi 的密碼登入功能

$ cd /etc/ssh $ nano sshd_config 加入以下三行 PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no 存檔 重新啟動 ssh 服務 $  sudo systemctl restart ssh 最後你可以在 terminal 開另外一個 tab 來驗證是否成功: $  ssh pi@your-ip -o PubKeyAuthentication=no pi@your-ip: Permission denied (publickey).

RPi 作業系統的 ntp service 相關

查詢系統的自動同步時間服務 $ sudo systemctl status ntp.service  # 是否正常執行中 $ sudo systemctl stop ntp.service  # 停止 $ sudo systemctl start ntp.service  # 執行 $ sudo systemctl restart ntp.service  # 重新執行 $ sudo systemctl disable ntp.service  # 停用 $ sudo systemctl enable ntp.service  # 啟用 查詢 ntp 設定檔 $ cat /etc/ntp.conf # 使用 chronyd 的話 $ cat /etc/chrony/chrony.conf # 或是 $ less /etc/ntp.conf  # note: press q to exit 也可以使用以下命令直接查詢正在使用的 NTP 伺服器。這會向 NTP 伺服器發送查詢並顯示響應 $ ntpd -pdn # 使用 chronyd 的話 $ chronyc sources 修改 ntp 設定檔 $ sudo nano /etc/ntp.conf 加進多個 pool pool 1.tw.pool.ntp.org iburst pool 2.pool.ntp.org  iburst pool 0.tw.pool.ntp.org iburst pool 0.asia.pool.ntp.org iburst ntp service 路徑位置 $ sudo nano /lib/systemd/system/ntp.service 標案內容 [Unit] Description=Network Time Service Documentation=man:ntpd(8) After=network.target Conflicts=systemd-timesyncd.service [Service] Type=forking # Debian uses a shell wrapper to process /etc/default/ntp # and select DHCP-provided NTP...

如何設定crontab工作排程器 RPi

以 ntp 系統自動更新時間為相關例子 確認 crontab 服務正常 $ sudo systemctl status  crontab.service  # 是否正常執行中 $ sudo systemctl stop    crontab.service  # 停止 $ sudo systemctl start   crontab.service  # 執行 $ sudo systemctl restart crontab.service  # 重新執行 $ sudo systemctl disable crontab.service  # 停用 $ sudo systemctl enable  crontab.service  # 啟用 可以新增檔案放在 /etc/cron.d/ ,系統就會自動載入   $ sudo nano /etc/cron.d/auto_ntpdate 內容示意 */1 * * * * /bin/sh /home/pi/exec/whatevershell.sh > /dev/null 5 * * * *  root (/usr/sbin/ntpdate 118.163.81.63 )  &> /dev/null 10 * * * * root (/usr/sbin/ntpdate 162.159.200.1 )  &> /dev/null 15 * * * * root (/usr/sbin/ntpdate 17.253.116.253 ) &> /dev/null 20 * * * * root (/usr/sbin/ntpdate 103.147.22.149 ) &> /dev/null 25 * * * * root (/usr/sbin/ntpdate 211.22.103.157 ) &> /dev/null ...

列出有在監聽的 port 指令

看有開的 port (listening ports) $ sudo netstat -tulpn $ sudo ss -tulpn $ sudo lsof -i -P -n | grep LISTEN

MacOS 讀取記憶卡 image 存到硬碟

圖片
開啟 Disk Utility app 在 External > Generic STORAGE DEVICE Media 按右鍵選 【Image from "…"】 檔名方便複製: 【給什麼單位用-型號-在什麼平台上-版本】 Format 選: 【DVD/CD master】 【Save】 Example: 會存成 .cdr 檔,改成 .iso 即可 注意,~/.ssh/authorized_keys 會被改寫 done 從備份的 image 檔燒回 SD Card 後,~/.ssh/authorized_keys 檔要先做清空內容的動作,裡面有莫名的亂碼。

RPi 讓作業系統預設的螢幕輸出不要顯示到螢幕上

可以直接記憶卡插上電腦,進入到 boot 資料夾 關掉 HDMI output display 改 /boot/config.txt 加兩行參數 disable_splash=1 hdmi_blanking=2 改 /boot/cmdline.txt 把 console=tty1 改成 console=tty 3   在 rootwait 後加上 quiet splash loglevel=3 logo.nologo vt.global_cursor_default=0  也可以加這三個參數,未知作用,可以試試: disable_overscan=1 dwc_otg.lpm_enable=0 plymouth.ignore-serial-consoles 反之,可顯示 output

RPi 新增使用者帳號

RPi 新增使用者帳號,記得權限先都不給 $ sudo useradd <username> $ sudo grep <username> /etc/passwd /etc/shadow /etc/group $ sudo passwd <username> # 改密碼 $ sudo cp -a /etc/skel /home/ <username> $ sudo grep <username> /etc/passwd /etc/shadow /etc/group

RPi 應設的權限

自己的 home 目錄,以帳號 pi 來說,以下幾種 $ chmod 751 /home/pi # 只有 pi 有全部權限rwx、跟群組可rx該資料夾、其他知道路徑的可執行 $ chmod 700 /home/pi # 嚴格,群組跟其它人都不能進該資料夾(eg. cd 或 ls) $ chmod 751 /home/pi # 可以讓其它人進該資料夾,比如說 nginx 或 www-data (不在群組的話),但看不到這一層有什麼檔案。不過知道有哪些檔案或資料夾,並且權限符合的話,可以直接 cd 那些資料夾或是 cat nano vi 檔案等等的指令。 SSH的權限 $ chmod 600 ~/.ssh/id_rsa $ chmod 644 ~/.ssh/id_rsa.pub $ chmod 600 ~/.ssh/known_hosts $ chmod 600 ~/.ssh/authorized_keys $ chmod 700 ~/.ssh 如果有使用到SSL憑證的話,不應該變更這兩個檔 $ sudo chmod 664 server.key $ sudo chmod 664 server.crt