50. 使用远程 Shell 进行监视和 Management(不建议使用)

Spring Boot 支持称为“ CRaSH”的集成 Java Shell。您可以使用 CRaSH sshtelnet进入正在运行的应用程序。要启用远程 Shell 程序支持,请将以下依赖项添加到您的项目中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-remote-shell</artifactId>
 </dependency>

Note

远程 Shell 已弃用,并将在 Spring Boot 2.0 中删除。

Tip

如果您还希望启用 telnet 访问,则还需要依赖org.crsh:crsh.shell.telnet

Note

CRaSH 需要与 JDK 一起运行,因为它需要即时编译命令。如果基本的help命令失败,则您可能正在使用 JRE 运行。

50.1 连接到远程 Shell

默认情况下,远程 Shell 程序将监听端口2000上的连接。默认用户为user,默认密码将随机生成并显示在日志输出中。如果您的应用程序使用的是 Spring Security,则默认情况下 Shell 将使用相同的配置。如果没有,将应用简单的身份验证,您应该看到如下消息:

Using default password for shell access: ec03e16c-4cf4-49ee-b745-7c8255c1dd7e

Linux 和 OSX 用户可以使用ssh连接到远程 Shell,Windows 用户可以下载并安装PuTTY

$ ssh -p 2000 [emailprotected]

[emailprotected]'s password:
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v1.5.9.RELEASE) on myhost

键入help以获取命令列表。 Spring Boot 提供了metricsbeansautoconfigendpoint命令。

50.1.1 远程 Shell 凭据

您可以使用management.shell.auth.simple.user.namemanagement.shell.auth.simple.user.password属性来配置自定义连接凭据。也可以使用“ Spring Security” AuthenticationManager来处理登录职责。有关完整的详细信息,请参见CrshAutoConfigurationShellProperties Javadoc。

50.2 扩展远程 Shell

可以通过许多有趣的方式扩展远程 Shell。

50.2.1 远程 Shell 命令

您可以使用 Groovy 编写其他 Shell 命令(有关详细信息,请参见 CRaSH 文档)。由于 CRaSH 的 Java 编译器的限制,因此不支持用 Java 编写的命令。默认情况下,Spring Boot 将在以下位置搜索命令:

  • classpath*:/commands/**

  • classpath*:/crash/commands/**

Tip

您可以通过设置shell.command-path-patterns属性来更改搜索路径。

Note

如果使用的是可执行归档文件,那么 shell 命令依赖的任何类都必须打包在嵌套 jar 中,而不是直接打包在可执行 jar 或 war 中。

这是一个简单的“ hello”命令,可以从src/main/resources/commands/hello.groovy加载

package commands

import org.crsh.cli.Command
import org.crsh.cli.Usage
import org.crsh.command.InvocationContext

class hello {

    @Usage("Say Hello")
    @Command
    def main(InvocationContext context) {
        return "Hello"
    }

}

Spring Boot 向InvocationContext添加了一些其他属性,您可以从命令中访问它们:

Attribute NameDescription
spring.boot.versionSpring Boot 的版本
spring.version核心 Spring 框架的版本
spring.beanfactory进入 SpringBeanFactory
spring.environment进入 SpringEnvironment

50.2.2 远程 Shell 插件

除了新命令,还可以扩展其他 CRaSH Shell 功能。所有扩展为org.crsh.plugin.CRaSHPlugin的 Spring Bean 都会自动在 shell 中注册。

有关更多信息,请参阅CRaSH 参考文档