用SSH实现无密码自动登陆
- SSH广泛用于脚本自动化,它使得我们可以在远程主机上执行命令并读取输出。SSH通常使用用户名和密码进行认证,在其执行过程中会提示输入密码。但是在自动化脚本中要求用户输入密码就显得不实际了。因此需要将登录过程自动化。SSH包含了一个内建特性,可以用SSH密钥实现自动登录。
1. 预备知识:
SSH采用非对称加密技术,认证密钥包含两部分:一个公钥和一个私钥。我们可以通过ssh-keygen
命令创建认证密钥。想要实现自动化认证,公钥必须放置在服务器中(将其加入文件~/.ssh/authorized_keys
),与公钥对应的私钥应该放入登录客户机的~/.ssh
目录中。另一些与SSH相关的配置信息(例如,arthorized_keys文件的路径与名称)可以通过修改文件/etc/ssh/sshd_config进行配置。
2. 实战演练:
设置SSH自动化认证需要两步:
1. 创建SSH密钥,这里用于登录远程主机;
2. 将生成的公钥传给远程主机,并将其加入文件~/.ssh/authorized_keys
中。
输入命令ssh-keygen
创建SSH密钥,并指定加密算法类型为RSA:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/HELEN/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/HELEN/.ssh/id_rsa.
Your public key has been saved in /home/HELEN/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:NKlL1KFVD867uAwLIAd01ujibgrwx18Q45FrFlOCV4Q HELEN@Lucifer
The key's randomart image is:
+---[RSA 2048]----+
| . oo..+*.o |
|. o...EB = o |
|. . .X = o . |
| o . o X . . |
|+ + O S . |
|.= o + o . . |
|o . + o o . |
|.o . o = . |
|+ o o |
+----[SHA256]-----+
- 你需要输入一个口令来生成一对公钥和私钥。如果不输入的话,也可以生成密钥,但是这样做可不安全。我们可以编写监控脚本,利用自动登陆来登入多台主机。对于这种情况,在运行
ssh-keygen
命令时,不要填入口令,这样就能够避免在脚本运行时向你索要口令了。 - 现在
~/.ssh/id_rsa.pub
和~/.ssh/id_rsa
已经生成了。id_rsa.pub
是生成的公钥,i_rsa
是生成的私钥。公钥必须添加到远程服务器~/.ssh/authorized_keys
文件中,这台服务器也正是我们想从当前主机自动登入的那台服务器。 - 多数Linux发布版中有一个叫做
ssh-copy-di
的工具,它可以自动将公钥加入远程服务器的authorized_keys文件中。用法如下:ssh-copy-id USER@REMOTE_HOST