返回

CentOS 7 上用 Shell 脚本自动生成 SSH 密钥,如何解决提示问题?

Linux

在 CentOS 7 上使用 Shell 脚本自动执行 ssh-keygen

简介

在服务器管理中,自动化任务至关重要,尤其是在生成 SSH 密钥等繁琐任务时。在 CentOS 7 上,使用 shell 脚本来自动执行 ssh-keygen 命令可以节省时间和精力。然而,绕过命令行提示是一个常见的挑战,这篇文章将深入探讨使用 expect 命令解决此问题的解决方案。

问题:绕过提示

ssh-keygen 命令需要用户输入一系列信息,包括密码和密钥文件位置。当使用管道(|)将 yes 命令与 ssh-keygen 结合使用时,它只会输入一个 y 字符,而不是模拟连续的回车。

解决方案:使用 expect

expect 是一个用于自动化交互式程序的工具。它允许我们向程序发送预定义的输入,从而绕过提示并自动化任务。

要使用 expect 来自动执行 ssh-keygen 命令,我们需要创建一个 expect 脚本。脚本将包含以下步骤:

  • 启动 ssh-keygen 进程
  • 匹配并输入密码提示
  • 匹配并输入密钥文件位置提示

创建 expect 脚本

以下是 auto_ssh_keygen.exp expect 脚本示例:

#!/usr/bin/expect -f

spawn ssh-keygen -t rsa
expect "Enter file in which to save the key (/root/.ssh/id_rsa): "
send "\n"
expect "Enter passphrase (empty for no passphrase): "
send "\n"
expect "Enter same passphrase again: "
send "\n"
expect eof

使用 expect 脚本

一旦创建了 expect 脚本,就可以使用以下命令执行它:

expect auto_ssh_keygen.exp

结果

expect 脚本将自动执行 ssh-keygen 命令,绕过所有提示。将生成一对 RSA 密钥,并将其保存在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 中。

常见问题解答

Q:为什么使用 expect 比 yes 命令更好?
A:yes 命令只能输入一个字符,而 expect 可以模拟连续的回车并匹配特定的提示。

Q:是否需要安装 expect?
A:是的,请确保在服务器上安装了 expect 软件包。

Q:我可以修改 expect 脚本吗?
A:是的,可以根据需要修改脚本以匹配不同的提示或输入不同的值。

Q:这种方法是否适用于其他命令?
A:是的,expect 可以用于自动化需要用户交互的任何命令。

Q:是否有其他自动化 ssh-keygen 的方法?
A:是的,可以使用一些工具(例如 sshpass 或 autossh)来处理提示并自动化 ssh-keygen。

结论

使用 expect 来自动执行 ssh-keygen 命令是一种有效的方法,可以节省时间并简化服务器管理任务。通过遵循本文中的步骤,您可以创建自己的 expect 脚本并绕过 ssh-keygen 提示,从而实现自动化。