前面写的将博客迁移到阿里云的文章中,没有详细说明如何设置 SSH 公钥免密登录,今天就这个话题详细说明一下,希望对有自己服务器或者对服务器管理感兴趣的朋友有所帮助

什么是 SSH


SSH 是一种网络协议,用于计算机之间的加密登录,如果使用 SSH 协议登录远程计算机,就可以认为是安全登录,即使通信数据保被截获,密码或者内容也不会泄漏。 SSH 是 1995 年,芬兰学者 Tatu Ylongen 设计的,推出之后迅速在全世界推广开,已然成为互联网安全的一个基本解决方案,而且成为了 Linux 系统的标配 SSH 只是一种协议,存在不同版本的实现,在 Linux 中,标配的是 OpenSSH 开源实现,还记得有场罗永浩的手机发布会,将全部的门票收入捐赠给了 OpenSSH,Windows 上,用的实现了 SSH 协议的 Putty 软件

为什么要免密

ssh 支持密码登录和公钥登录,无论是用哪种方式,通信都是经过加密的,是安全的

不过用密码登录不方便,每次都需要输入用户名,密码,很不方便,同时增加密码泄漏的风险

另外在一些软件,如 Git,提供了 SSH 支持,会使开发效率更高,同时不必存储明文密码

作为运维人员,需要同时管理多台机器,记住每台的密码是困难和不可考的,通过 SSH 公钥将大大减轻工作负荷

……

设置 SSH


了解了 SSH 的基本情况,下面了解下设置步骤

1 制作密钥对


SSH 的密钥需要有足够的安全性,另外需要有一定的格式,每个实现 SSH 协议的软件,都提供了密钥生成工具,Linux 中的是 ssh-keygen, Windows 中 Putty 会带一个 puttygen 下面分别做下声明

ssh-keygen


打开终端,输入 ssh-keygen

然后会提示输入密钥文件存储位置及名称,默认会在当前登录用户家目录下,密钥文件名为 id_rsa 之后提示输入密钥的密码,这是为了防止密钥被泄漏,被别人利用的风险,只是自己来用的话可以不用设置密码,直接回车就行 确认密码时继续回车 此时密钥就生成好了,有类似下提示(你的一定与下面的不同,因为生成过程是随机的):

Your identification has been saved in /home/alisx/id_rsa
Your public key has been saved in /home/alisx/id_rsa.pub
The key fingerprint is:
SHA256:K7H4cfgm0oIutSJ4Pq61e9253JBf40tLQnYiY6WDfv8 alisx@alisx-HP-EliteBook-840-G2
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|          .      |
|       . o       |
|      o S + .    |
|  .  o = O o     |
|...o.o*.*.. =    |
|=.=.+.+B+= * o   |
|oO*+ o.o+.+.E.   |
+----[SHA256]-----+


然后在刚才输入的密钥目录,就会有 id_rsa

id_rsa.pub

两个文件,分别是私钥文件和公钥文件(文件名,取决于输入的密码文件名)

puttygen


putty 实现了 SSH,不过密钥文件格式与 OpenSSH 有所不同,所以在将公钥推送到 Linux 服务器上时,需要转化成 OpenSSH 的密钥文件格式 打开 puttygen

一般会随 putty 一起安装,与 putty 在同一目录下,putty 在这里下载:https://puttygen.com/download.php?val=4


点击 Genrate

按钮

ssh登录怎么使用pem_ssh多台机器同时登录一个账号


生成 然后在空白区域随即晃动鼠标,以便生成随机量,产生更安全的密钥对

ssh登录怎么使用pem_ssh 免密_02


生成过程 生成完后,就能看到密钥信息了

ssh登录怎么使用pem_ssh 免密_03


密钥信息 通过 Save public key

Save private key

按钮保存的密钥文件格式是 Putty 的,OpenSSH 格式的公钥在上面的只读文本框里,选择复制,粘贴到文本文件中,例如命名为: id_rsa.pub

,就得到了 OpenSSH 格式的公钥文件了

ssh登录怎么使用pem_ssh多台机器同时登录一个账号_04


OpenSSH 公钥

2 向服务器推送公钥


需要将公钥内容让远程服务器知道,才能用对应的私钥登录

ssh-copy-id


Linux 中,可以用 ssh-copy-id 来推送,在终端中输入:

ssh-copy-id -i   @


如果服务可以联通,且是第一次连接的话,会得到提示是否确认远程服务器的指纹,确定没有连接错主机的话,输入 yes

实际上 确定没有连接错主机 不够严谨,如果主机是通过主机名连接的,可能会有 DNS 攻击风险,看起来连上了,实际上连接的是别的机器,请注意


然后输入登录密码(因为还没有密钥,需要用密码登录),完成推送 此时就可以用密钥登录服务器了

ssh u@

需要注意的是,在 Linux 下用 ssh 登录远程服务器,会在当前家目录 .ssh 下找私钥,如果私钥没在 .ssh 下,需要用参数 -i 指定私钥路径 另外请注意,ssh-copy-id 中 -i 指定的是要推送到服务器的公钥,ssh 中 -i 指定的是私钥

手工推送


Windows 下没有 ssh-copy-id 工具,需要手工向服务器推送 使用用户名,密码连接到远程主机,打开用户家目录下 .ssh/authorized_keys

文件,将刚才用 puttygen 生成的 id_rsa.pub 文件内容(注意只有一行),粘贴到 authorized_keys

中即可 对于新主机,或者服务器上的新用户来说,没有 .ssh

文件夹,就需要创建一个

mkdir ~/.ssh

在创建 authorized_keys 文件

touch ~/.ssh/authorized_keys


然后,修改 .ssh

目录 和 authorized_keys

文件的权限

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

请注意:修改权限很重要,否则将无法使用密钥连接


完成后,就可以向 authorized_keys

中粘贴公钥内容了

如果在 Windows 中安装了 Git,可以在 Git Bash 环境下使用 Linux 命令,即可以像 Linux 一样创建密钥

3 连接


设置完成后,就可以免密连了 Linux 下,使用 ssh

命令

ssh u@


Putty 中需要设置:

ssh登录怎么使用pem_ssh免密登录_05


Putty 设置

注意 Putty 使用的私钥文件后缀名是 .ppk ,即通过 Save private key 按钮