前段时间别人告诉我 putty 自动登录的方法,那时候对 putty, linux 没有清楚的概念,模模糊糊弄好了,但后来自己试了下又出问题了,然后就没有在找原因。
昨天 tortoiseSVN update 的时候提示: network connection closed unexpectedly.于是网上查了一下,又说是与 putty 的 default 中填写 host name 会出错,但是我的 default 中没有填写东西,还是不管用,最后别人告诉我服务器上装了个新的 svn,这是原因,然后我的 tortoiseSVN 又可以 update 了。
因为这个吧,我看了下 putty 的文档。感觉里面说的很清楚。下面我把 putty 自动登录的原理和方法整理一下。
putty 自动登录的原理:
传统方式登录是,用户填写 host name 后 putty 发送请求,server 接到请求后要求输入 用户名 和 密码,这时候正确的输入就可以登录了,但是 putty 自动登录是不涉及到用户名和密码的,就是你自动登录所用到的信息中与你在 server 上的用户名和密码没有关系。
原理是这样的:
puttygen.exe 产生一对 key(public key, private key),非对称加密的密钥,public key 保存到 server 上,private key 自己保存,产生这个 key pair 是根据鼠标移动生成的,所以与你的 用户名 和 密码 没有关系。这样在 putty 的设置里面把这个 private key 保存下来,然后每次用这个配置登录的时候,putty 会把这个 private key 传到 server 上,然后 server 用 public key 加密你的用户名,然后用 private key 解密,然后和你的 用户名 比较,如果相同,则是合法用户(如果你在 sava private key 的时候填写了 passphrase 的话,putty 把 private key 传到 server 上后还会要求你输入这个 passphrase),登录成功。
具体操作方法:
1. 进入 puttygen.exe, 点击 generate,然后移动下鼠标。产生 key pair 是根据鼠标移动来产生的。
2. 产生完后,点击 save private key,当然在点击之前你可以在 key passphrase 里面输入加密 private key 的字符,但是这样的话就不能完全免去自动登录了,因为当你 putty server 的时候 server 还会要求你输入这个 passphrase。(这个 passphrase 是加密保存在自己 disk 上的 private key 的)。
3. 把 key 框中的整个内容复制出来。
4. 用你的 用户名 和 密码 登录 server,进入自己宿主目录,进入 .ssh 目录,没有的话自己建个就可以,然后把上步复制的内容写到这个目录下的叫做 authorised_keys 的文件了(新建这个文件)。根据你使用的协议的不同可能这个文件名也不同。(
authorized_keys2
,
authorization,
注意如果文件名是
authorization 的话,这个文件里还需要填写其他内容,具体见 putty 文档
)
。
5. 进入 putty
i. Session->Host Name(for ip address), 填写 server 的地址。
ii. Connection, seconds between keepalives: 填写一个数字,防止断线
iii. Connection->Data, 填写 auto_login username.
iiii. Connection->SSH->auth, private key file for authentication 里面找到第 2 步保存的 private key
iiiii. Session, saved sessions 填写个名字,然后 save 一下,保存这个设置,以后直接双击这个 saved session 就可以自动登录了。
补充:看完这个如果还是不清楚的话就看下 putty 的文档。里面说的很清楚。