概述
之前一直使用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 | { |
这样就可以直接透过跳板机登录到内网机器。