--- title: Windows Terminal's Settings for Git Bash and SSH --- # Windows Terminal's Settings for Git Bash and SSH Windows Terminal 是 Windows 10 的一個免費 APP, 可以從 Microsoft Store 下載取得. 它自動認得 WSL 裡安裝的 `Distro`, 看起來相當不錯. 不過卻少了 git for windows 的 Git Bash, 和 SSH 的設定. 以下是如何設定讓它也可以直接啟動 Git Bash, 和直接用 SSH 連上特定的主機. --- ### 加入 Git Bash (git for windows) 設定 1. 使用快速鍵 `ctrl`+`,` 開啟設定, 或者由 `v` 圖示 --> `設定` 進入設定. :::info 這裡建議大家安裝 VS Code, 並將 `.json` 檔預設的 '**開啟檔案**' 程式設定為 **VS code**. 如果已經被其他程式註冊了, 也可以經由變更 `.json` 檔的預設 '**開啟檔案**' 的程式將它改成使用 VS Code 來開啟. (點選任意的 `.json` 檔, 按下滑鼠右鍵, 再點選 '**內容\(R\)**' 即可開啟變更設定頁面). ::: <div style='text-align:center'> <img style="width:90%; margin:auto" src="https://pic.pimg.tw/magicjackting/1606310271-1732006633-g_l.png" title="Windows Terminal-Git Bash.png" alt="Windows Terminal-Git Bash.png" /> <p>進入 Windows Terminal 設定.</p> </p> </div> :::info 新版本 (v 1.7.1033.0) 已經預設成使用圖形介面來進行設定了. 不過我們還是可以經由設定畫面**左下方**的 **`開啟 JSON 檔案`** 來開啟設定檔. 設定檔路徑在: 使用者**家目錄**下的 `AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json`. ::: 2. 將以下設定加到適當的設定段中 (你可以發現其他的**較短的設定段落**, 例如: 'Windows PowerShell' `powershell.exe`, '命令提示字元' `cmd.exe`, ... 等字眼). 插入後記得將 `C:/Programs Files/Git` 改成你自己安裝 `git for windows` 的地方 (一共有二處) ```json { // 請將 'C:/Programs Files/Git' 換成你安裝 'git for windows' 的路徑 "name" : "Git Bash", "tabTitle": "Git Bash", "commandline" : "C:/Program Files/Git/bin/bash.exe --login", "startingDirectory" : "%USERPROFILE%", "fontFace" : "Consolas", "fontSize" : 14, "acrylicOpacity" : 0.95, "closeOnExit" : true, "colorScheme" : "Campbell", "cursorColor" : "#FFFFFF", "cursorShape" : "bar", "historySize" : 9001, "icon": "C:/Program Files/Git/mingw64/share/git/git-for-windows.ico", "padding" : "0, 0, 0, 0", "snapOnInput" : true, "useAcrylic" : true }, ``` <div style='text-align:center'> <img style='width:90%; margin:auto' src="https://pic.pimg.tw/magicjackting/1606445362-4177366369-g_l.png" border="0" title="Windows Termainl-Git Bash-2.png" alt="Windows Termainl-Git Bash-2.png" /> <p>插入 git bash 設定</p> </div> 3. 存檔, 重開 Windows Terminal 即可. :::info 已經不需要 `"guid"` 這一項設定了, `stackoverflow` 上有人的回答裡有 `"guid"` (上面的貼圖裡也有). 但是後來實測時, 發現是可以不要的. 應該是已經取消為必要項目的設定了吧?! ::: 4. **選項設定**之一: 當我們直接用 windows terminal 開啟 git-bash 會產生另一個令人不悅的狀況: 錯誤提醒音從 beep 變成**整個螢幕一閃**了, 如果你很在意這個改變可以在 **git-bash 視窗**裡執行下列指令, 然後重開 git-bash 即可. ```bash echo "set bell-style none" >> ~/.inputrc ``` 或者是在 Windows CMD 視窗裡, 以下指令效果也一樣: ```cmd echo set bell-style none >> %USERPROFILE%\.inputrc ``` `bell-style` 的值可以設定成 `none`, `audible`, `visible` 三個其中之一. 不過實測是設成 `audible` 不 work. (在 profile 裡加了 `"bellStyle":"audible"` 設定也還是沒聲音). :::success 目前的 Windows Terminal (ver. 1.4.3243.0) 沒辦法有聲音. Windows Terminal Preview (ver. 1.5.3242.0) 則已經修正了這個問題. ::: 5. **選項設定**之二: 我印象中, git-bash 預設在輸入檔案路徑時, 只要輸入少數幾個字元, 再按下 `TAB` 鍵就會不分大小寫幫們找到最相近的路徑. 後來 (不知是從哪一版開始) 卻是會分大小寫, 必需大小一致才行, 讓我這個被慣壞了的老人家不知如何是好, 好在這個也是可以設定的. 如果你也是很在意這個改變, 可以在 git-bash 視窗裡執行下列指令, 然後重開 git-bash 即可. ```bash echo "set completion-ignore-case On" >> ~/.inputrc ``` 或者是在 Windows CMD 視窗裡, 以下指令效果也一樣: ```cmd echo set completion-ignore-case On >> %USERPROFILE%\.inputrc ``` <br /> --- ### 加入 SSH 設定 Windows 預設有安裝 OpenSSH, 我們可以直接輸入 `ssh` 使用它. 它會在你的**家目錄**下建立一個名為 `.ssh` 的目錄, 裡面會有二個檔案. * `known_hosts`<br />裡面有 `ssh` 已經連過線的主機. 除了刪除一些臨時測試的主機**一般我們不會動這個檔案**. 或者是發生類似下面的錯誤畫面: ``` @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:KWuQBLo2qjB18kY1iLl58wW1b0pl2T3vPz9aj6WDmHM. Please contact your system administrator. Add correct host key in /c/Users/user001/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /c/Users/user001/.ssh/known_hosts:3 ECDSA host key for 192.168.33.10 has changed and you have requested strict checking. Host key verification failed. ``` 這個訊息是說遠端主機的金鑰改變了, 這個平時是不應該發生的, 不過如果是還在建置/測試/設定中的主機那就另當別論了. 我們可以直接把它指出來的那一行**刪除**, 即可解決這個問題. * `config`<br />裡面是主機的相關設定, 如: ip 地址, 使用哪一個帳號等等 * `Host`: 輸入的是我們在 `ssh` 指令輸入的**主機代號** (不一定是主機域名, ip 也可以, 甚至同一部主機我們需要以不同的帳號連進去時, 也可以自己取一個**代號**) * `User`: 則指定連線這部主機時用什麼用戶帳號 * `Port`: 指定這部主機的 SSH port 號碼. * `HostName`: 則是輸入 DNS 域名, 或者直接輸入 ip 地址 (沒有 DNS 可以幫你 name 轉 ip 時. 例如: 區域網路 (LAN) 中的主機或者自己肚子裡的 VM). * `IdentityFile`: 指定私鑰檔 (private key) 的位置. :::warning * 需要注意的是: 你在輸入 `ssh` 指令時, 偶而會用代號, 偶而又會用 ip (都沒有輸入 '用戶帳號') 那麼應該在設定檔中, 輸入二個設定. 如: 下面的例子裡的 第 2 和第 3 組設定. ::: `.ssh/config` 範例檔內容如下: ``` Host myVMS HostName 192.168.36.130 User jackting Host 192.168.33.10 User vagrant Host jupyter HostName 192.168.33.10 User vagrant ``` 接著是這一段的的重點: 如何設定 Windows Terminal 直接用 SSH 連到主機上. ```json { "name": "SSH Jupyter", "tabTitle": "vBox-Jupyter", "commandline" : "ssh 192.168.33.10", "fontFace" : "Consolas", "fontSize" : 14, "icon": "%USERPROFILE%/Pictures/gnome_fs_ssh.ico" }, ``` * `"icon"`: 麻煩你自己上網找一個免費的下載下來用. * `"commandline"`: `ssh` 後面的主機你可以用 `ip`, 或者是 `ssh` 的 `config` 設定檔裡的**代號**. * 如果對方用的是 private key 則可以再插入 `-i path/to/private_key_file` * 例如: `vagrant` 開設出來的 VM `privatekey` 路徑是 `.vagrant/machines/default/virtualbox/private_key` 那 `"commandline"` 的內容就會是<br />**`"ssh -i D:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key 192.168.33.10"`**<br />或者不改指令, 直接在設定檔裡加入指定私鑰檔的路徑. 例如: ``` Host 192.168.33.10 User vagrant IdentityFile "D:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key" Host jupyter HostName 192.168.33.10 User vagrant IdentityFile "D:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key" ``` <br /> --- ### 加入 Docker Container 設定 即然可以認得 WSL 裡的 **`Distro`**, 那...連線到 Docker 的 Container 應該不是什麼太難的事. ```json { "name": "myAIlab bash", "tabTitle": "docker-Jupyterlab", "commandline": "docker exec -it myAIlab bash", "fontFace": "Consolas", "fontSize": 14, "icon": "C:/Program Files/Docker/Docker/resources/ddvp.ico" }, ``` * icon 檔是 Docker Desktop for Windows 內建的. * 你只要把 `commandline` 裡的 **myAIlab** 換成自己要連上去的 docker container name 即可. <br /> --- ### 修改預設的 Terminal session Windows Terminal 原本預設的 terminal session 是 powershell ```json "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", ``` 將原本預設 powershell 改成 cmd, 如下: ```json "defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", ``` `defaultProfile` 的設定值是 profile 的 `guid`, 如果沒有 `guid` 也可以改用 profile 的 `name`, 例如前面新增加的 git-bash 設定. ```json "defaultProfile": "Git Bash", ``` :::info 這一段已經可以直接經由**圖形介面**設定了. ::: ###### tags: `Windows`, `Windows Terminal`, `Windows Terminal Settings`, `Git-Bash`, `ssh`, `ssh to host with private key`, `ssh config`, `vagrant ssh`, `替代 vagrant ssh`, `default profile`