---
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`