SSH的公钥私钥问题
用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:
1 | $ ssh-keygen -t rsa |
- 你需要输入一个口令来生成一对公钥和私钥。如果不输入的话,也可以生成密钥,但是这样做可不安全。我们可以编写监控脚本,利用自动登陆来登入多台主机。对于这种情况,在运行
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