在 Windows 使用“非对称金钥”来远端登入 SSH 的方法
在 Linux Server 下使用 SSH 的“非对称金钥”来进行远端登入的方式相信大家应该都不陌生 (没实做过的可参考鸟哥或 study-area 的文件),下面我所要介绍的是在 Windows 下使用金钥来远端登入 SSH 的方法。
开始之前,先说一下“非对称金钥”:
“非对称金钥”是一种加密机制,由用户端以特定的加密算法产生两把“非对称”金钥: 即“公钥 (Public-Key)”与“私钥 (Private-Key)”。然后我们会把“私钥”留在自己的电脑,再把“公钥”传送到远端主机,当两把金钥碰在一起就会进行加解密比对,以确认是否彼此的身份是可以信任的,藉以执行特定的作业。
说得更简单一点,与其说是“公钥”与“私钥”,不如说是“锁头”与“钥匙”,由我自己来打造一组锁头及钥匙,我把这个锁头装在一个门上,然后我就可以用我的这一把钥匙来打开这扇门了! 同时呢,我也可以把相同的锁头装在很多的门上,那我就可以用这一把钥匙来开启很多门了…这样子的概念是否有比较清楚了呢?!
以下我们的目的是要用“非对称金钥系统”的机制,从 Windows 登入 Linux 主机,下面的步骤所要使用的软件都是由 PuTTY 所提供的工具程式,请先下载存放在自己的电脑:
产生公钥与私钥
执行 puttygen.exe:
- 先在 Parameters 的“Type of key to generate”字段选“SSH-2 DSA”。
- 如果你希望加密更多的位元数,可更改“Number of bits in a generated key”为“2048”或更多。
- 然后按 [Generate],就会开始产生金钥。在产生金钥的同时,请随意移动你的鼠标,做为随机乱数的取用。
金钥产生完毕,如下图所示:
- 在“Public key for pasting into OpenSSH authorized_keys file”里那一堆的奇怪的字串就是“公钥”,请直接复制里面的内容,然后贴到 Linux 主机上的 /home/登入帐号/.ssh/authorized_keys 档案 (请注意,这个档案的权限必须为 644)。
- 然后按 [Save private key] 按钮,将“私钥”储存在你的电脑。与私钥比较有关的是“Key passphrase”及“Confirm passphrase”这两个字段,这两个字段是用来设定私钥的密码,如果有设定的话,在每次要加载私钥时就会询问你这个密码,可以让你的私钥比较不容易被盗用。
- 另外还有一个 [Save public key],按下去之后就可以把“公钥”再备份一支到你的电脑 (但要使用这个备份的公钥时,必须把里面的一些注解删掉才行)。
使用私钥进行远端登入
产生完上面的两把金钥,并将公钥放到远端的主机之后,接下来就是如何在本地端加载私钥的问题了。因为 Windows 并不像 Linux 有一个固定存放私钥的地方,所以每次使用时都要各别加载,而且通常只能加载一个 (例如 PieTTY 是从 [选项] → [详细设定] → Connection → SSH → Auth 里的“Private key file for authentication”加载),并且只能在该程式使用。
所以接下来我们要执行 pageant.exe,这是“私钥”的代理程式,一执行这个程式,他会常驻在工作列的“通知区”,请在 pageant 的图示上点鼠标右键选“Add Key”,将你的私钥档案加载。
在加私钥时,如果你有设定“Key passphrase”,它就会跳出对话框叫你输入密码。这个代理程式可以同时让你加载很多私钥,并且所有同类型的程式都可以直接使用。
现在你就可以用你常用的 SSH 程式 (PieTTY, PuTTY…) 来登入到 Linux 主机看看,正确的话,只要输入帐号,不用再打密码就可以登入了。
补充…
使用 TortoiseSVN 配合 SSH
如果你有在使用 SVN 的话 (假设 SVN Server 是架在 Linux 主机,用户端为 Windows,用户端有安装 TortoiseSVN),刚好 TortoiseSVN 就有提供 SVN + SSH 的通讯协定来传输资料。
如果你的专案是以 SVN + SSH 做为通讯协定,每次你在执行任何 TortoiseSVN 的传输动作时,它就会不厌其烦的跟你询问远端主机的密码。
如果想要依照“非对称金钥”来与 Linux 主机做登入验证,则你需要到 TortoiseSVN 的参数设定里的“Dialogs 2”将“Recurse into unversioned folders”及“Contact the repository on startup”这两个选项都打勾,如下图所示:
这样应该就可以解决密码询问的问题了。
No comments yet.