这次ssh amazon ec2的instance,在家里电脑登录OK,到了公司电脑登录失败(只支持公钥机制)。私钥已经拷贝到公司的ubuntu上了,奇怪。
后来发现是.ssh目录下存在一些公钥文件导致了这个问题。ssh的时候使用-vvv可以看到很多调试信息,在这里看到在ssh认证的时候,发送过去的公钥不是amazon ec2的公钥,而是我本地.ssh目录下另外一个公钥。
所以删除了.ssh目录下所有的公钥文件之后,就OK了。
我猜想是这样:
1. 如果在.ssh/config下配置了针对该Host的IdentityFile,那么公钥不会搞错,ssh会寻找私钥文件名.pub这样的文件。
2. 貌似私钥文件中也是包含了公钥的,因为只给定一个私钥,ssh也可以分析并发送公钥给server
3. 貌似ssh的行为是,如果.ssh目录下有username@hostname签名的公钥,就会去使用这个/些公钥,而不是使用私钥中的。
Anyway,把公钥文件都删掉就没烦恼了,反正一般生成了公钥私钥对之后,公钥都是上传到服务器侧的,不再需要了。
[UPDATE]
发现这么做的一个副作用:Ubuntu的ssh-agent会扫描.ssh下的公钥然后自动ssh-add,这样以后登录只需要输入一次私钥的密码之后就不用输入了。
但是现在.ssh下的公钥被我删掉了,所以现在每次都要输入密码。
所以可以将公钥移到另外一个地方,然后每次有新的key的话,用ssh-add手动添加一下。