17.2. 在远程连接和断开连接

连接到远程容器有两种替代方法。如果您已在运行 Red Hat Fuse 命令 shell,您必须调用控制台命令以连接到远程容器。或者,您可以直接在命令行中运行实用程序以连接到远程容器。

17.2.1. 从远程容器连接到独立容器

17.2.1.1. 概述

任何容器的命令控制台都可用于访问远程容器。使用 SSH,本地容器的控制台可连接到远程容器,并将功能作为远程容器的命令控制台连接。

17.2.1.2. 使用 ssh:ssh console 命令

您可以使用 ssh:ssh 控制台命令连接到远程容器的控制台。

ssh:ssh 命令语法

ssh:ssh -l username -P password -p port hostname

-l
用于连接到远程容器的用户名。使用具有 admin 特权的有效 JAAS 登录凭据。
-P
用于连接到远程容器的密码。
-p
用于访问所需容器的远程控制台的 SSH 端口。默认值为 8101。有关更改端口号的详情,请查看 第 17.1.2 节 “配置独立容器以进行远程访问”
主机名
运行远程容器的机器的主机名。有关更改主机名的详情,请查看 第 17.1.2 节 “配置独立容器以进行远程访问”
警告

我们建议您在 etc/users.properties 文件中自定义用户名和密码。

注意

如果您的远程容器部署在 Oracle VM Server for SPARC 实例中,则很可能默认的 SSH 端口值 8101 已被"逻辑域管理器守护进程"使用。在这种情况下,您需要重新配置容器的 SSH 端口,如 第 17.1.2 节 “配置独立容器以进行远程访问” 所述。

要确认您已连接到正确的容器,在 Karaf 控制台提示符处键入 shell:info,这将返回有关当前连接实例的信息。

17.2.1.3. 从远程控制台断开

要断开与远程控制台的连接,请在提示符下输入 logout 或按 Ctrl+D

您与远程容器断开连接,控制台一次将再次管理本地容器。

17.2.2. 使用客户端命令行实用程序连接到容器

17.2.2.1. 使用远程客户端

远程客户端允许您安全地连接到远程 Red Hat Fuse 容器,而无需在本地启动完整的 Fuse 容器。

例如,若要快速连接到在同一机器上在服务器模式下运行的 Fuse 实例,请打开命令提示符并运行 client[.bat] 脚本(位于 InstallDir/bin 目录中),如下所示:

client

通常,您可以提供一个主机名、端口、用户名和密码来连接远程实例。如果您在一个较大的脚本中使用客户端,例如在测试套件中,您可以附加控制台命令,如下所示:

client -a 8101 -h hostname -u username -p password shell:info

或者,如果省略 -p 选项,会提示您输入密码。

对于独立容器,使用具有 admin 特权的任何有效的 JAAS 用户凭证。

要显示客户端的可用选项,请键入:

client --help

Karaf 客户端帮助

Apache Felix Karaf client
  -a [port]     specify the port to connect to
  -h [host]     specify the host to connect to
  -u [user]     specify the user name
  -p [password] specify the password
  --help        shows this help message
  -v            raise verbosity
  -r [attempts] retry connection establishment (up to attempts times)
  -d [delay]    intra-retry delay (defaults to 2 seconds)
  [commands]    commands to run
If no commands are specified, the client will be put in an interactive mode

17.2.2.2. 远程客户端默认凭证

您可能会感到惊喜,发现您可以使用 bin/client 登录 Karaf 容器,而无需提供任何凭证。这是因为远程客户端程序已预先配置为使用默认凭证。如果没有指定凭证,远程客户端会自动尝试使用以下默认凭证(按顺序):

  • 默认的 SSH 密钥 10.10.10.2-abrt 尝试使用默认的 Apache Karaf SSH 密钥。允许此登录成功对应的配置条目在 etc/keys.properties 文件中被注释掉。
  • 默认用户名/密码凭证 abrt-abrt 尝试使用用户名和密码的 admin 组合登录。在 etc/users.properties 文件中,默认情况下,允许此登录成功对应的配置条目会被注释掉。

因此,如果您通过在 users.properties 中创建新用户,只需取消注释默认的 admin/admin 凭据,即可找到 bin/client 实用程序是否可以在不提供凭证的情况下登录。

重要

为安全起见,Fuse 在首次安装 Containers 时禁用了默认凭据(通过注释掉)。然而,如果您只取消注释这些默认凭据 而无需更改 默认密码或 SSH 公钥,那么您将在 Karaf 容器中开启安全漏洞。在生产环境中 不得 执行此操作。如果发现您可以使用 bin/client 在不提供凭证的情况下登录容器,这表明容器不安全,且您必须执行相应的步骤来在生产环境中修复

17.2.2.3. 从远程客户端控制台断开

如果您使用远程客户端打开远程控制台,而不是使用它传递命令,则需要断开连接。要断开与远程客户端控制台的连接,请在提示符下输入 logout 或按 Ctrl-D

客户端将断开连接并退出。

17.2.3. 使用 SSH 命令行实用程序连接到容器

17.2.3.1. 概述

您还可以使用 ssh 命令行实用程序(类似 UNIX 的操作系统中的标准实用程序)登录到 Red Hat Fuse 容器,其中验证机制基于公钥加密(必须首先在容器中安装公钥加密)。例如,如果容器配置为侦听 TCP 端口 8101,您可以按照如下所示登录:

ssh -p 8101 jdoe@localhost
重要

基于密钥的登录目前仅在独立容器上支持,不支持 Fabric 容器。

17.2.3.2. 先决条件

要使用基于密钥的 SSH 登录,必须满足以下先决条件:

17.2.3.3. 默认密钥位置

ssh 命令会在默认密钥位置自动查找私钥。建议您在默认位置安装您的密钥,因为它可让您明确指定该位置的问题。

在 *NIX 操作系统中,RSA 密钥对的默认位置是:

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

在 Windows 操作系统中,RSA 密钥对的默认位置是:

C:\Documents and Settings\Username\.ssh\id_rsa
C:\Documents and Settings\Username\.ssh\id_rsa.pub
注意

Red Hat Fuse 仅支持 RSA 密钥。DSA 密钥 无法正常工作

17.2.3.4. 创建新的 SSH 密钥对

使用 ssh-keygen 程序生成 RSA 密钥对。打开新命令提示符并输入以下命令:

ssh-keygen -t rsa -b 2048

以上命令会生成 RSA 密钥,密钥长度为 2048 位。然后会提示您指定密钥对的文件名:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/Username/.ssh/id_rsa):

键入 return,将密钥对保存到默认位置。然后,系统将提示您输入密码短语:

Enter passphrase (empty for no passphrase):

您可以选择在此处输入密码短语或键入 returned 两次来选择不通过短语。

注意

如果您要运行 Fabric 控制台命令使用相同的密钥对,则建议您选择 不使用密码短语,因为 Fabric 不支持使用加密私钥。

17.2.3.5. 在容器中安装 SSH 公钥

要使用 SSH 密钥对登录 Red Hat JBoss Fuse 容器,您必须通过在 INSTALL_DIR/etc/keys.properties 文件中创建新用户条目,从而在容器中安装 SSH 公钥。此文件中的每个用户条目都出现在一行中,其格式如下:

Username=PublicKey,Role1,Role2,...

例如,如果您的公钥文件 ~/.ssh/id_rsa.pub,包含以下内容:

ssh-rsa AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7
gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCX
YFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6Ewo
FhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACB
AKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj4
7Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx jdoe@doemachine.local

您可以通过将以下条目添加到 InstallDir/etc/keys.properties 文件中(一行),以使用 admin 角色创建 jdoe 用户:

jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7
gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCX
YFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6Ewo
FhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACB
AKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj4
7Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,g:admingroup
重要

请勿在此处插入 id_rsa.pub 文件的整个内容。仅插入代表公钥本身的符号块。

17.2.3.6. 支持检查公钥身份验证

启动容器后,您可以通过运行 jaas:realms 控制台命令来检查公钥身份验证是否被支持,如下所示:

karaf@root()> jaas:realms
Index │ Realm Name │ Login Module Class Name
──────┼────────────┼─────────────────────────────────────────────────────-
1 │ karaf │ org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
2 │ karaf │ org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
3 │ karaf │ org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
4 │ karaf │ org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
5 │ karaf │ org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule
karaf@root()>

您应该看到是否已安装 PublickeyLoginModule。使用这个配置,您可以使用用户名/密码凭证或公钥凭证登录到容器。

17.2.3.7. 将 ssh 角色添加到 etc/keys.properties

etc/keys.properties 中定义的 admin 组 必须包含 ssh 角色,如下例所示:

#
# For security reason, the default auto-signed key is disabled.
# The user guide describes how to generate/update the key.
#
#karaf=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAIEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53JjTuyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh

如果 admingroup 的定义中没有包括 ssh 角色,您必须编辑 etc/keys.properties 并添加 ssh 角色。

17.2.3.8. 使用基于密钥的 SSH 登录

现在,您已准备好使用基于密钥的 SSH 实用程序登录容器。例如:

$ ssh -p 8101 jdoe@localhost
____          _   _   _       _     _____
|  _ \ ___  __| | | | | | __ _| |_  |  ___|   _ ___  ___
| |_) / _ \/ _` | | |_| |/ _` | __| | |_ | | | / __|/ _ \
|  _ <  __/ (_| | |  _  | (_| | |_  |  _|| |_| \__ \  __/
|_| \_\___|\__,_| |_| |_|\__,_|\__| |_|   \__,_|___/___|

  Fuse (7.x.x.fuse-xxxxxx-redhat-xxxxx)
  http://www.redhat.com/products/jbossenterprisemiddleware/fuse/

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.

Open a browser to http://localhost:8181/hawtio to access the management console

Hit '<ctrl-d>' or 'shutdown' to shutdown Red Hat Fuse.

karaf@root()>
注意

如果您使用加密的私钥,ssh 实用程序将提示您输入密码短语。