为了方面免密码登录 VPS 和防止 SSH 暴力破解,本文记录在 Windows 平台上使用 Xshell 6 进行 SSH 密钥配置的过程。

SSH 密钥登录原理

SSH 密钥对可以让用户无需输入密码即可登录到 SSH 服务器中。由于登录的过程不需要密码,因此可以防止由于密码被拦截、破解造成的账户密码泄露。再加上密码短语(passphrase)的使用,使得 SSH 的安全性更高一层。

SSH 密钥对总是一把公钥、一把私钥的成对出现;公钥可以自由的添加到远程 SSH 服务器中用来验证用户是否合法;私钥相当于自己的身份认证,需要妥善保存不能泄露。

SSH 密钥的其使用原理很简单:用户将公钥添加到远程主机中,登录的时候,远程主机会向用户发送一段随即字符串,用户使用自己的私钥加密后,再发送到远程主机。远程主机使用本地存储的公钥进行解密,如果成功,证明用户时可信的,直接允许登录 shell ,不再要求密码。这样就保证了整个登录过程的安全,防止了中间人攻击。

生成密钥对

在 Xshell 中依次点击 工具 - 用户密钥管理者 - 生成

Xshell 配置 SSH 密钥登录

单击下一步生成公钥

Xshell 配置 SSH 密钥登录

单击下一步输入用户密钥的名称和密码

Xshell 配置 SSH 密钥登录

Xshell 配置 SSH 密钥登录

点击完成之后,可以看到刚才生成的密钥(私钥)。然后单击导出便可以保存私钥。如果之前步骤中设置了密钥的密码,则在导出的时候需要输入密码。

Xshell 配置 SSH 密钥登录

接下来便是导出公钥。选择刚才创建的私钥 - 单击属性 - 选择公钥 - 点击保存为文件

Xshell 配置 SSH 密钥登录

之后便可以得到一对密钥对。

Xshell 配置 SSH 密钥登录

在服务器上添加公钥

在用户主目录下创建文件夹 .ssh 并在该文件下创建文件 ~/.ssh/authorized_keys

mkdir ~/.ssh
touch ~/.ssh/authorized_keys

.ssh文件夹修改为 700 权限(只有本用户才能读写,进入),.ssh/authorized_keys 400 权限(只有本用户才能读)。

chmod 700 ~/.ssh && chmod 400 ~/.ssh/authorized_keys

将之前创建的公钥 id_rsa_2048_2.pub 通过 Xftp 上传至 .ssh 文件夹。

上传完成之后,将公钥导入 authorized_keys

cat ~/.ssh/id_rsa_2048_2.pub >> ~/.ssh/authorized_keys

修改配置文件

修改 SSH 的配置文件 /etc/ssh/sshd_config

vim  /etc/ssh/sshd_config

找到下面三行:

#RSAAuthentication yes(不同 Linux 发行版这行可能没有)
#PubkeyAuthentication yes
#AuthorizedKeysFile    .ssh/authorized_keys

取消注释,将前面的 # 去掉后保存。

禁止密码登录

找到 PasswordAuthentication yes 这一行,修改为 PasswordAuthentication no 可以禁止密码登录。

修改 SSH 登录端口

如果需要修改 SSH 登录端口,可以找到 #Port 22 这一行,去掉注释(去掉 # 号),然后修改至其他端口。

修改完 SSH 配置文件之后需要重启才能生效:

service sshd restart

连接服务器

如果前面配置成功的话,下一次连接服务器 Xshell 中会默认以 Public Key 登录,如下图所示。如果之前设置了私钥的密码,在每一次连接时都需要输入(私钥的)密码。所以不知道 Xshell 这个记住密码有什么用。

Xshell 配置 SSH 密钥登录

备注
authorized_keys 该文件中可以包含多对公钥。也就是说,一台服务器可以用多对密钥登录。但是,在添加多对公钥的时候记得在多条公钥之间用换行符分开。Xshell 生成的公钥末尾默认没有换行符。


参考
Xshell配置SSH秘钥登录 - 知行合一
创建 SSH 密钥对 - 不忘初心 方得始终

标签: xshell, ssh

添加新评论