Windows Terminal’s 设定Git Bash 和SSH
Windows Terminal 是Windows 10 的一个免费APP, 可以从Microsoft Store 下载取得.
它自动认得WSL里安装的Distro ,看起来相当不错.不过却少了git for windows的Git Bash,和SSH的设定.以下是如何设定让它也可以直接起动Git Bash,和直接用SSH连上主机.
加入Git Bash (git for windows) 设定
使用快速键ctrl + ,开启设定,或者由V图示–>设定进入设定
注意:它会使用预设的应用程式开启它的设定档setting.json (如果有安装VS Code一般都会自动使用VS code开启).
将以下设定加到适当的设定段中(你可以发现其他的较短的设定段落,例如: ‘Windows PowerShell’ powershell.exe , ‘命令提示字元’ cmd.exe , …等字眼).插入后记得将C:/Program Files/Git改成你自己安装git for windows的地方(一共有二处)
{ // 请将 'C:/Program Files/Git' 还成你安装 'git for windows' 的路径
"name": "Git Bash",
"tabTitle": "Git Bash",
"commandline": "C:/Program Files/Git/bin/bash.exe --login -i",
"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
},
存档, 重开Windows Terminal 即可.
选项设定之一:
当我们直接用windows terminal开启git-bash会产生另一个令人不悦的状况:错误提醒音从beep变成整个萤幕一闪了,如果你很在意这个改变可以在git-bash视窗里执行下列指令,然后重开git-bash即可.
echo "set bell-sytle none" >> ~/.inputrc
bell-style可以设定成none , audible , visible三个其中之一.不过目前(Windows Terminal v1.14)实测是设成audible不work.在profile里加了"bellStyle":"audible"设定也还是没声音(这个bug会在1.15版修正.因为使用Windows Terminal Preview (v1.15)是可以正常运作).
选项设定之二:
我映象中, git-bash预设在输入档案路径时,会不分大小写帮们找到最相近的路径,后来(不知是从哪一版开始)却是会分大小写,让我这个被惯坏了的老人家不知如何是好,好在这个也是可以设定的.如果你也是很在意这个改变,可以在git-bash视窗里执行下列指令,然后重开git-bash即可.
echo "set completion-ignore-case On" >> ~/.inputrc
注一:已经不需要"guid"这一项设定了, stackoverflow上有人的回答里有"guid" (上面的贴图里也有).但是后来实测时,发现是可以不要的.应该是已经取消为必要项目的设定了吧?!
加入SSH 设定
Windows预设有安装OpenSSH,我们可以直接输入ssh使用它.
它会在你的家目录下建立一个名为.ssh的目录,里面会有二个档案.
known_hosts
里面有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
里面是主机的相关设定,如: ip地址,连线的port号码,使用哪一个帐号等等
Host :输入的是我们在ssh指令输入的主机代号(不一定是主机域名, ip也可以,甚至同一部主机我们需要以不同的帐号连进去时,也可以自己取一个代号)
User :则指定连线这部主机时用什么用户帐号.
Port :指定这部主机的SSH port号码.
HostName :则是输入DNS域名,或者直接输入ip地址(没有DNS可以帮你name转ip时.例如:区域网路(LAN)中的主机或者自己肚子里的VM).
IdentityFile :指定私钥档(private key)的位置.
注二:需要注意的是:如果你在输入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 连到主机上.
{
"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)则可以在config档里登载私钥档的路径.
当然也可以直接在指令里插入
-i path/to/private_key_file
例如: vagrant开设出来的VM privatekey路径是.vagrant/machines/default/virtualbox/private_key那"commandline"的内容就会是
"commandline": "ssh -i C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key 192.168.33.10"
或者不改指令, 直接在设定档里加入指定私钥档的路径.
Host 192.168.33.10
User vagrant
IdentityFile "C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key"
Host jupyter
HostName 192.168.33.10
User vagrant
IdentityFile "C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key"
加入Docker Container 设定
即然可以认得WSL里的Distro ,那…连线到Docker的Container应该不是什么太难的事.
```c
{
"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内建的.你只要把myAIlab换成自己要连上去的docker container name即可.
修改预设的Terminal session
Windows Terminal 原本预设的terminal session 是powershell
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
将原本预设powershell 改成cmd, 如下:
"defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
defaultProfile的设定值是profile的guid ,如果没有guid也可以改用profile的name ,例如前面新增加的git-bash设定.
"defaultProfile": "Git Bash",