传统上,访问远程服务器使用的是用户名-密码对。但这种方法也带来了安全性与易用性的矛盾:使用强密码虽然带来了更高的安全性,但也意味着每次登陆服务器都要输一大串的字符,十分麻烦。SSH Keys可以说就是为了解决这个矛盾而生的。本文将总结如何配置服务器与Windows客户端,实现基于SSH Keys的远程访问。

0. 安装Putty

Putty是Windows平台开源的ssh客户端。本文所需的Putty和PuttyGen默认会一并安装。下载对应Windows版本的msi文件安装即可。官网:http://www.putty.org/

 

1. SSH Keys简介

一组SSH Keys由两个钥匙构成:公钥(Public Key)和密钥(Private Key)。公钥和密钥的关系如同锁头和钥匙。

公钥可以随意公开,一般存储在服务器上。密钥由管理员保管,本身还可以由口令(Pass phrase)进一步加密。密钥证明了访问者的合法身份,当服务器收到密钥时,会与其所持的公钥进行匹配,匹配成功就会对访问者进行放行。除非你知道你在做什么,否则不要在任何时候向任何人透露你的密钥

使用SSH Keys带来了如下优点:

  1. 可以为每台需要访问服务器的设备单独生成一套SSH Keys. 如果设备丢失或被攻破,仅需在服务器删除对应的公钥就可以阻止来自该设备的所有访问。
  2. SSH Keys本身与访问远程账户的密码无关。SSH Keys的泄露并不会直接导致管理员密码的泄露。
  3. 建立远程连接时只需输入所使用密钥的口令即可。即使口令十分简单,安全性也依旧可以很高。

 

2. 生成SSH钥匙对

为了使用SSH Keys访问远程服务器,首先要生成一组SSH钥匙对。为此我们启动PuTTYgen(如下图,图中Putty版本为0.70,后续版本可能与图示有所差异)

最下一排可以选择加密算法和参数,一般保持默认即可。选择好参数后点击Generate,程序会提示在“Key”一栏的空白区域滑动鼠标以生成一些随机性。

滑动鼠标直至进度条走满,会在Keys下方显示公钥,如下图

在“Key passphrase”和“confirm passphrase”处输入并确认口令。此口令为密钥认证口令,以后使用SSH Keys进行远程连接时会要求输出该口令,而非密码。口令可以留空,但不推荐这么做。点击“Save public key”和“Save private key”分别保存公钥和密钥。记住存放位置,但暂时不要关闭此窗口。

 

3. 将公钥上传至服务器

按照平时访问服务器的方式登陆服务器。

如果需要为某个用户添加公钥,打开如下文件(其中<user>处填写对应用户名)

/home/<user>/.ssh/authorized_keys

如果需要为root添加公钥,打开如下文件

 /root/.ssh/authorized_keys 

如果authorized_keys不存在,手动创建即可。在文件末尾新起一行,粘贴前一节PuttyGen中Public Key文本框的全部内容。注意,公钥结尾处可以看到两个等号( ==  ),等号后为注释内容,可以根据使用场景自行添加注释,如创建日期,主机名称等等,方便后期管理公钥,或删除某个特定设备的公钥。

添加后保存退出,并重启ssh服务使修改生效:

$ sudo service ssh restart

 

4.配置Putty

服务器端部署公钥后,需要配置本地的ssh客户端,即putty,才可以使用SSH Keys进行远程访问。打开Putty,如下图

选中Session,在Host Name一项填写远程主机名,或IP地址,及设定的ssh端口。在Saved Sessions下为本配置起一个名字,先不要点Save。

选中Connection下的Data子项目,如下图

在顶部“Auto-login username”处填写上一节中刚刚添加了公钥的用户名。例:如果将公钥添加到了:

 /home/sammy/.ssh/authorized_keys 

那么此处的username应该填写sammy

选中左侧Connection->SSH->Auth,如下图

在“Authentication parames”一栏下,点Browse浏览并指定含有private key的密钥文件(在第二步中保存的.ppk文件)。

上述配置全部完成后,返回左侧Session选项卡,并点“Save”保存配置

 

5. 测试连接

至此,服务端和客户端都已经配置好,准备万全了。双击保存的配置文件即可使用SSH Keys访问服务器。成功将出现下图

如图所示,putty自动使用了指定的用户名,并尝试通过匹配公钥建立连接。询问的密码也不再是服务器的用户密码,而是密钥口令。如果上面生成密钥一步没有指定口令,此处将会自动完成登陆。

参考资料:

  1. https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-putty-on-digitalocean-droplets-windows-users
  2. https://www.digitalocean.com/community/questions/how-do-i-add-an-ssh-key-to-an-existing-droplet

 


1 条评论

Sunny

Sunny · 11/10/2017 上午9:07

或者直接用Mac

发表评论