一个偶然的机会,发现我从一台电脑的虚拟机中的ssh可以直接连到我的另一台服务器。
而我并没有在这个虚拟机中配置ssh key。另一台电脑就不行。
它是如何连上去的?
ssh-v查到一段:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key:
debug1: Server accepts key: pkalg ssh-rsa blen 279debug1: Authentication succeeded (publickey).
而不行的电脑,信息是这样的:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/swigger/.ssh/id_rsa
debug1: Trying private key: /home/swigger/.ssh/id_dsa
debug1: Trying private key: /home/swigger/.ssh/id_ecdsa
debug1: Next authentication method: password
显然,这个Offering public key:后面又没有东西是最可疑的。找到ssh源代码一看,原来这里本来是要显示一个文件名,但可惜是个空串,再花了点时间查了一下,看代码看的,原来这里有个identity没有文件名,不是从文件加载的,来自一个叫agent的东西
然后就查ssh-agent的相关东西,查这个agent的数据来自哪里,从unix socket查到相关的sshd进程。
然后就搜到了相关的信息,原来:
securecrt 支持ssh agent forwarding, 不过要在global options中选ssh2打开。
打开后,如果为某个server启用了public key登录,那么相关的key就被securecrt 记录到agent里去了。
通过相关的agent协议,securecrt可以把这个数据提交到在里面运行的ssh, scp等命令,于是啥也没有配置的虚拟机也能直接登到我的目标server了。
不过,我是为server a启用的public key登录,但server b(虚拟机)里也有这个public key的agent记录,这算是bug还是feature呢?