一、储备知识
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 gaohui@localhost.localdomain
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 gaohui@192.168.233.129:~/.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.
gaohui@192.168.233.129's password:
id_rsa.pub 100% 410 1.0MB/s 00:00
远程服务器检查:
gaohui@gaohui-virtual-machine:~/.ssh$ ls
authorized_keys
三、无密码登录检验
[gaohui@localhost .ssh]$ ssh gaohui@192.168.233.129
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