实现SSH的无密码自动登录

一、储备知识

       SSH广泛用于脚本自动化。借助SSH,我们可以在远程主机上执行命令并读取输出。SSH使用用户名和密码进行认证。在SSH命令的执行过程中提示输入密码。但是在自动化脚本中,SSH命令可能在一个循环中执行上百次,每次都得提供密码的话,显然不实际。因此,我们需要将登入过程自动化。SSH就包含了一个内建的特性,可以用SSH密钥实现自动登陆。这则攻略描述了如何创建SSH密钥并协助实现自动登陆。

       SSH采用基于公钥和基于私钥的加密技术进行自动化认证。认证密钥包含两部分:一个公钥和一个私钥。我们可以通过“ssh-keygen”命令创建认证密钥。要想实现自动化认证,公钥必须放置在服务器中(将其加入文件~/.ssh/authorized_keys),与公钥对应的私钥应该放入你用来登录的客户机的~/.ssh目录中。另一些与SSH相关的配置信息(例如,authorized_keys文件的路径与名称)可以通过修改文件/etc/ssh/sshd_config进行配置。

       设置SSH自动化认证步骤:
                1. 创建SSH密钥,这需要登录到远程主机
                2. 将生成的密钥传输到远程主机,并将其加入文件~/.ssh/authorized_keys中

二、实现方法

1、输入命令创建SSH密钥,并指定加密算法

ssh-keygen -t rsa

      这里使用ssh-keygen 命令,-t参数表示接下来跟的是加密类型(type),然后就是加密的算法,可以选择rsa1(老版的rsa),rsa(新版的rsa),dsa,ecdsa,ed25519 等。这里用作证书通常使用rsa算法。

       然后会要求你填输出的文件夹,一般默认就摆在/home/user/.ssh/下的id_rsa文件中吧。不过需要注意的是,如果曾经生成过密钥,现在重新生成一个的话,如果不改地址是会将原来的覆盖掉的,这样可能会惹一些麻烦的。。。

       接下来你可以另外设置一个密码,这个密码相当于一个独立的连接服务器的密码,而不是服务器用户的密码。你就是相当于用这个密码来替代服务器的用户密码(这个密码的长度要大于四)。当然如果怕麻烦可以直接回车回车,表示不用这个密码。

[gaohui@localhost SHELL]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gaohui/.ssh/id_rsa): 
Created directory '/home/gaohui/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/gaohui/.ssh/id_rsa.
Your public key has been saved in /home/gaohui/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DWq2LazFNaYOM6uZgLpnVtgTN7SnE2dLnte5x3qSvNg [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|      .          |
|     . ..        |
|    . =.=o       |
|   o o+XSo.. .   |
|. . +=o*+.. o    |
|o  .+.B... . +   |
|..+o O .   o= +  |
|o=+.o .   . E*   |
+----[SHA256]-----+

      到这一步密码就生成完了,在~/.ssh/下就有了生成的文件了。其中id_rsa.pub是公钥,id_rsa是私钥。

[gaohui@localhost .ssh]$ ls
id_rsa  id_rsa.pub

2、上传公钥到远程服务器

      公钥必须添加到想要自动登录的远程服务器的/home/user/.ssh/authorized_key文件中。

scp id_rsa.pub user@remote_host:~/.ssh/authorized_keys

      本地服务器操作过程:

[gaohui@localhost .ssh]$ scp id_rsa.pub [email protected]:~/.ssh/authorized_keys
The authenticity of host '192.168.233.129 (192.168.233.129)' can't be established.
ECDSA key fingerprint is SHA256:UIesd8LMZYkaheXtEdiBXK6HQmCj69ddTEqa8GgNz6g.
ECDSA key fingerprint is MD5:ed:2e:77:93:f4:b8:fe:58:b7:50:96:00:dd:52:ac:a6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.233.129' (ECDSA) to the list of known hosts.
[email protected]'s password: 
id_rsa.pub                                                                                                                                                                                                     100%  410     1.0MB/s   00:00    

        远程服务器检查:

gaohui@gaohui-virtual-machine:~/.ssh$ ls
authorized_keys

三、无密码登录检验

[gaohui@localhost .ssh]$ ssh [email protected]
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-169-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

15 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

New release '20.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

*** System restart required ***
Last login: Thu Mar  3 16:12:29 2022 from 192.168.233.1

你可能感兴趣的:(Linux,ssh,服务器,运维,linux,centos)