17.2. 远程连接和断开连接


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

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

17.2.1.1. 概述

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

17.2.1.2. 使用 ssh:ssh console 命令

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

ssh:ssh 命令语法

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

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

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

注意

如果您的远程容器部署在 用于 SPARC 实例的 Oracle VM Server 上,则默认的 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 密钥 criu-criutries,以使用默认的 Apache Karaf SSH 密钥进行登录。在 etc/keys.properties 文件中默认注释掉允许此登录的对应配置条目。
  • 使用admin / admin组合使用用户名和密码登录的默认用户名/密码凭证 。在 etc/users.properties 文件中默认注释掉允许此登录的对应配置条目。

因此,如果您在 Karaf 容器中创建新用户,只需在 users.properties 中取消注释默认的 admin / admin 凭据,您会发现 bin/client 实用程序可以在不提供凭证的情况下登录。

重要

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

17.2.2.3. 断开与远程客户端控制台的连接

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

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

17.2.3. 使用 SSH 命令行工具连接到容器

17.2.3.1. 概述

您还可以使用 ssh 命令行工具(类似 UNIX 的操作系统的标准实用程序)登录到红帽 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):

您可以选择在此处输入 pass phrase,或者键入 return 两次以选择 no pass phrase。

注意

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

17.2.3.5. 在容器中安装 SSH 公钥

要使用 SSH 密钥对登录到红帽 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 中定义的 admingroup 必须包含 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 实用程序将提示您输入密语。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.