如何使用密钥对通过SSH登录而不使用密码

时间:2020-02-23 14:41:29  来源:igfitidea点击:

在上一篇文章中,我们看到了如何使用Expect脚本通过SSH登录到远程服务器。
Expect脚本的问题在于,您的密码是用普通的文本文件编写的,可能会受到影响。
密码也会出现类似的问题,因为如果有人知道您的密码,他就可以轻松登录到您的远程服务器。

SSH使用不需要密码的SSH公钥身份验证提供了一种更安全的登录方式。
此方法具有两个安全级别,因为它还需要一个密码短语,因此黑客将需要这两个密码才能登录到远程服务器。
在本文中,我们将学习如何轻松地在本地计算机和远程服务器之间设置公共密钥身份验证。

生成SSH密钥对

首先,我们需要生成将用于SSH身份验证的公钥和私钥。
我们可以使用ssh-keygen生成它们。
私钥和公钥需要在本地计算机上生成。

hyman@hymans-MacBook-Pro:~$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hyman/.ssh/id_rsa):  <ENTER>  
Enter passphrase (empty for no passphrase): <passphrase>
Enter same passphrase again: <passphrase>
Your identification has been saved in /Users/hyman/.ssh/id_rsa.
Your public key has been saved in /Users/hyman/.ssh/id_rsa.pub.
The key fingerprint is:
e7:ad:6c:d8:06:rr:8f:ef:5s:fe:e2:2f:05:9c:5f:b0 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|              .  |
|             . + |
|        D     E .|
|        .o .   o.|
|         =. .   +|
|        ..=. ..* |
|         oo.o=*o*|
+-----------------+

为了提高安全性,切勿将密码短语留空。
生成SSH密钥对后,我们就可以进行下一步了。

使用公钥设置远程服务器

生成公钥后(/Users/hyman/.ssh/id_rsa.pub),下一个任务是将其复制到远程服务器上。
您可以使用ssh-copy-id将公钥复制到远程服务器,但OpenSSH中不提供。
因此,您将必须通过SFTP公开密钥,也可以将其复制粘贴到远程服务器上的authorized_keys中。
另外,我们需要更改ssh目录和authorized_keys文件的权限。

hyman@and [~]# mkdir .ssh
hyman@and [~]# cd .ssh/
hyman@and [~/.ssh]# vi authorized_keys  <paste the contents from /Users/hyman/.ssh/id_rsa.pub>
hyman@and [~/.ssh]# cd 
hyman@and [~]# chmod 700 .ssh
hyman@and [~]# chmod 600 .ssh/authorized_keys

完成上述步骤后,无需使用密码即可登录到远程服务器。

hyman@hymans-MacBook-Pro:~$ssh [email protected]
Last login: Mon Jun 10 22:05:25 2013 from c-67-161-57-160.hsd1.ca.comcast.net
hyman333@and [~]#

重要事项

  • 如果您使用的是Mac OS,则首次尝试登录时,将弹出"钥匙串"窗口,要求输入密码。
    您可以使用"记住密码"选项,以便不再要求输入密码。

  • 如果您使用的是Unix或者Linux系统,则系统会要求您输入密码来登录,但是可以使用ssh-agentssh-add命令来避免这种情况。

  • 将公用密钥文件(/Users/hyman/.ssh/id_rsa.pub)添加到远程主机后,请确保将其删除。