SSH
參考:https://askie.today/lets-set-ssh-config/
SSH登入主機時,不用再輸入密碼,然後也不用輸入ip的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ssh-keygen
ssh-copy-id 帳號@主機IP
cd ~/.ssh vi config
Host test HostName 192.168.4.18 User prlab identityfile ~/.ssh/id_rsa
ssh test
|
known_hosts
每個用戶都有自己專屬的 known_hosts
文件 (存放在~/.ssh/known_hosts
) known_hosts
文件是 SSH (Secure Shell) 的一個重要組成部分,用於存儲已知主機的公鑰指紋。它是 SSH 信任模型的一部分,主要用來防止 中間人攻擊 (Man-in-the-Middle Attack)。當您使用 SSH 連接到一台新主機時(例如 ssh user@hostname),SSH 會執行以下步驟:
- 檢查主機鍵:
- SSH 客戶端會從伺服器獲取該主機的公鑰(Host Key)。
- 比對已知主機:
- SSH 會檢查本地的 ~/.ssh/known_hosts 文件,看是否已經有該主機的公鑰記錄。
- 行為決定:
- 如果主機鍵匹配:
- 如果主機鍵不存在(首次連接):
- SSH 會提示用戶是否信任該主機(例如顯示鍵指紋並要求輸入 yes 確認)。
- 一旦確認,該主機的公鑰會被添加到
~/.ssh/known_hosts
文件中。
- 如果主機鍵不匹配:
- 這表明該主機的鍵可能被更改,或者有人冒充該主機。SSH 會拋出警告,並阻止連接。
known_hosts
文件中的每一行代表一台主機,包括:
- 主機名/IP 地址(可能經過哈希處理)。
- 主機鍵類型(例如 ssh-rsa 或 ecdsa-sha2-nistp256)。
- 主機公鑰指紋。
ssh-keygen
如果想要把 known_hosts
進行哈希化,可以透過以下指令進行
-H
選項告訴 ssh-keygen
要哈希化 known_hosts
文件。
-f
選項指定要處理的文件。在這種情況下,我們將 ~/.ssh/known_hosts
文件哈希化,這是 SSH 客戶端用於存儲已知主機的公鑰指紋的文件。
-F
它會從 ~/.ssh/known_hosts
文件中搜尋並顯示與該主機(或 IP 地址)相關的條目。
1 2 3 4 5
| ssh-keygen -H -f ~/.ssh/known_hosts
ssh-keygen -F 192.168.0.8
|
以下是有哈希跟沒哈希的差異:
1 2 3 4 5
| 192.168.0.8 ssh-ed25519 AAAA...xsc1OGNEg9BHgbi
|1|PB7kC7z....=|T8MlhtE...= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAt9BQ8J...
|
其他 ssh-keygen
的用法:
zip
我最常用的就是壓所檔案,並且需要加密或分割檔案用。
- 一般加密檔案用的指令。
1 2 3
|
zip -er ./test.zip ./test
|
- 把zip檔案進行分割和合併的做法。
1 2 3 4 5 6 7 8 9 10
|
zip - ../test.zip | split -b 10MB
cat x* > ../test.zip
|
Mac
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 轉換成中文 option + shift + B : 可以打入顏文字 # emoji ctrl + command + space : 可以打入表情符號
# mac ctrl + command + F : 全螢幕 ctrl + 左右鍵 : 往右邊的 desktop 切換 command + M : 收起來最小化
# 瀏覽器 command + T : 新增分頁 command + W : 關閉分頁 command + shift + T : 還原關閉分頁 command + L : 跳到網址列 command + R : 重新整理 command + [ : 上一頁 command + ] : 下一頁
# Aflred command + , : 開啟 Preference 設定
|
SHELL 配置文件
.bashrc
vs .zshrc
vs .profile
vs .bash_profile
差異在哪裡?
比較 |
bashrc |
bash_profile |
zshrc |
啟動時間 |
系統啟動後 自動運行,只在bash shell下執行 |
用戶登入後 才會運行 |
系統啟動後 自動運行,只在 zsh shell下執行 |
實行時機 |
每次打開終端 都會運行 |
每次登入 都會運行一次 |
每次打開終端 都會運行 |
更新方法 |
source bashrc |
source profile |
source zshrc |
局面變量 |
局部 ,只能繼承 /etc/profile 中的變量 |
/etc/profile 中設定的變量是全局 。 |
全局 ,可以用於任何用戶 |
總結:
- 如果使用 bash 請更改
~/.bashrc
或是 ~/.bash_profile
- bashrc 是每次打開終端都會運行
- bash_profile 是每次登入都會運行一次
- 如果使用 zsh 請更改
~/.zshrc
或是 ~/.zshenv
- 如果使用 bash 並且想要讓所有用戶都生效,請更改
/etc/profile
關於 /usr/
關於 python & conda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| which python which -a python which -a python3
conda env list conda search python conda list -n your_environment_name python conda list
conda create -n <env_name> python=3.7 conda activate <env_name>
conda remove -n <env_name> --all
conda create --name new_name --clone old_name conda remove --name old_name --all
|
python 項目自動產生requirements.txt
ref: https://blog.csdn.net/pearl8899/article/details/113877334
ref: pip freeze creates some weird path instead of the package version
有時候我們在和別人合作的時候會希望保持環境的一致。
方法1: 整個環境下的安裝包都保存到 requirements.txt
使用這個方法的建議是你使用 virtualenv 環境下安裝的包都保存到 requirements.txt 中。
如果開啟一個新專案,建議建立一個新的virtualenv環境,並使用以下指令來建立所有的package清單。
1 2 3 4 5
| pip freeze > requirements.txt
pip list --format=freeze > requirements.txt
|
方法2: 只生成單個項目中有使用到的安裝包
以下的作用範圍只會將當前項目使用的內容導出成為requirements.txt
先定點到項目目錄下,然後執行 pipreqs ./ --encoding=utf-8
,可以避免編碼錯誤,並自動在根目錄生成requirements.txt文件。
速度會比方法1還要慢。
1 2
| pip install pipreqs pipreqs .
|
如何安裝 requirements.txt 的套件
1
| pip install -r requirements.txt
|
一鍵安裝各種包
最好先使用conda建立新環境,以做好環境隔離,然後再使用以下指令安裝所有的包。
1 2
| pip install -r requirements.txt conda install --yes --file requirements.txt
|
conda install vs pip install
如果使用conda安裝的python會建議使用conda install,因為他是嚴格檢查依賴,表示如果下載某個套件,該套件相關的依賴也會一併下載,conda比較能保證工作,如果conda沒有的再使用pip install即可。
接下來我們要去自己的網站下載api json檔案,然後放到 ~/.kaggle/kaggle.json
這個目錄下面
1 2
| kaggle datasets download -d <owner-name>/<dataset-name> -p <path-to-download>
|
也可以透過opendatasets套件來下載
1
| pip install opendatasets
|
1 2
| import opendatasets as od od.download('https://www.kaggle.com/c/3136/download-all')
|
關於 Java
1 2 3 4 5 6 7 8
| brew search openjdk
brew install openjdk@8
java -version
|
快速切換版本的做法,以我的微粒我目前本機上有17跟8
你會發現版本都裝在 /Library/Java/JavaVirtualMachines/
這個目錄下面
1 2 3 4 5 6 7 8 9 10 11
| cd /Library/Java/JavaVirtualMachines/
ls
/Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
|
但是如果你是使用arm架構,例如Macos m1, m2晶片,那可能不適用
會看到以下錯誤
1 2 3 4 5 6 7
| ❯ brew install openjdk@8 ==> Downloading https://formulae.brew.sh/api/formula.jws.json
==> Downloading https://formulae.brew.sh/api/cask.jws.json
openjdk@8: The x86_64 architecture is required for this software. Error: openjdk@8: An unsatisfied requirement failed this build.
|
- 要去oracle下載是用自己架構的版本:https://www.oracle.com/java/technologies/javase/jdk8-arm-downloads.html
- 進行解壓縮後,我自己放到
/Library/Java/
這個目錄下面
vi ~/.bash_profile
進去添加以下內容
1 2 3 4 5 6 7
| java8=/Library/Java/jdk1.8.0_401.jdk/Contents/Home java17=/usr/bin/java
export JAVA_HOME=$java17 alias java8="export JAVA_HOME=$java8" alias java17="export JAVA_HOME=$java17"
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| source ~/.bash_profile
java8 java -version > output java version "1.8.0_401" Java(TM) SE Runtime Environment (build 1.8.0_401-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)
java17 java -version > output openjdk version "17.0.6" 2023-01-17 OpenJDK Runtime Environment Temurin-17.0.6+10 (build 17.0.6+10) OpenJDK 64-Bit Server VM Temurin-17.0.6+10 (build 17.0.6+10, mixed mode)
|
關於 git
1 2 3 4 5
| push --set-upstream origin <your-branch-name>
git branch -vv
|