概述
之前一直使用xshell来进行ssh的管理,最近由于一些问题,不便再使用xshell,所以这里尝试换用Windows Terminal来进行ssh的管理。
这里使用以下元素:
- Windows Terminal:ssh管理。
- ssh config:配置各个host的登录选项。
- ssh-agent: 私钥管理。
实现方便的ssh免密登录。
安装Windows Terminal
在Microsoft Store中搜索安装即可,这一步很简单,网上的教程也很多。
安装Openssh Server
直接搜索可选功能:

打开,然后添加Openssh:

一般情况windows已经安装好了client,安装一下server就行。
启动ssh-agent
为了不用在ssh config中指定每个host的私钥,所以这里选择使用ssh-agent来进行私钥管理。
windows默认是不启动这个服务的,需要手动开启:

直接搜索服务然后打开,

找到OpenSSH Authentication Agent,设置为自动,并启动它。
生成ssh密钥
首先先看看自己是不是已经生成过了密钥,位于用户目录~/.ssh下,例如我的密钥生成在C:\Users\龙\.ssh下,有id_rsa和id_rsa.pub两个文件,就代表已经生成了密钥,当然重新生成也可以。
如果没有,那就要手动生成一下。打开Windows terminal,输入命令,
| 1 | // 使用自己的邮箱 | 
然后一路回车就完事:

然后就可以在用户目录下发现生成的私钥与公钥:

添加私钥到ssh-agent
ssh-agent能对多个私钥进行自动管理,但是首先还是需要手动把私钥添加进去,直接使用ssh-add
| 1 | PS C:\Users\龙> ssh-add .\.ssh\id_rsa | 
使用ssh-add -l可以看到现在添加了哪些私钥。
配置ssh config文件
如果不配置config文件,那么每次都需要输入一大段命令,挺麻烦的,配置config文件,可以简化很多操作。
来到ssh目录~/.ssh下,新创建一个文件config,修改文件内容进行配置,例如我这里配置如下:
| 1 | Host * | 
其中:
- Host:就表示你为这个配置的命名,支持通配符。
- ForwardAgent:表示是否使用ssh-agent来转发密钥。
- Hostname:远程地址。
- Port:远程端口。
- User:登录用户名。
这里使用了*通配,来表示所有Host都使用ssh-agent来转发密钥,配置了远程地址aly1。然后就可以在Windows terminal中使用ssh aly1来进行登录:

我这里已经拷贝了公钥过去,所以不需要输入密码,正常情况这里还是需要输入密码。
拷贝公钥到远程主机
为了实现免密登录,可以把公钥拷贝到远程主机。
首先把id_rsa.pub文件拷贝过去,使用scp命令:
| 1 | PS C:\Users\龙> scp .\.ssh\id_rsa.pub aly1:~/ | 
这样就拷贝到了远程主机的~目录下。
登录到远程主机,同样的,远程主机的~目录下也应该有.ssh文件夹(如果没有则创建一个),然后将公钥导入到authorized_keys文件中:
| 1 | [root@aly-1c2G ~]# cat id_rsa.pub >> .ssh/authorized_keys | 
这样就完成了公钥拷贝的过程,另外记得把拷贝到远程主机的id_rsa.pub文件删除掉(虽然没有任何影响)。
这样再次使用ssh aly1进行远程登录就不需要再输入密码了。
别的博客看了一下,可以使用更简单的命令来解决拷贝过程:
1
cat .\.ssh\id_rsa.pub | ssh aly1 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys'
| 1 | cat .\.ssh\id_rsa.pub | ssh aly1 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys' | 
创建Windows Terminal选项卡
目前为止,我们已经可以很简单的使用ssh aly1这样的方式进行远程登录了,但是问题就是,如果有很多主机,显然aly1这样的名字已经很难对主机进行区分,很难记住我们当前需要登录的是aly1还是aly2。所以这里可以创建选项卡来解决这个问题。
打开设置:

打开json配置文件:

增加配置如下:

| 1 | { | 
- 这里guid复制的上面的,然后随便改了一个数字。
- 选项卡命名name为1.1.1.1-aly1,增加ip在名字上来对主机进行区分。
- 使用了suppressApplicationTitle字段,来让这个选项卡的名字保持为name。
- commandline即此选项卡执行的命令,这里ssh aly1表示登录aly1。
效果如下:

点击即可打开对应的远程链接:

到这里就基本满足使用需求,方便快捷。
如何通过跳板机登录内网机器
对于正式环境,登录内部机器通常都需要经过跳板机,这里有几种方法透过跳板机来登录到内网机器。
方法一:ProxyJump
在ssh的config文件中进行配置:
| 1 | Host tbj | 
相当于指定target通过tbj来进行登录,这样就可以通过使用ssh target来进行登录。
方法二:ProxyCommand
在ssh的config文件中进行配置:
| 1 | Host tbj | 
和上面类似。
方法三:配置Windows Terminal选项卡
实际上,上面两个方法我经过尝试,都失败了…报错kex_exchange_identification: Connection closed by remote host。但是通过直接使用ssh命令可以成功登录:
| 1 | ssh -t tbj ssh wjx@192.168.0.100 -p 33 | 
那么就可以把这个命令直接配置到Windows Terminal选项卡里面,
| 1 | { | 
这样就可以直接透过跳板机登录到内网机器。