16.2. 远程连接和断开连接
有两种方法可以连接到远程容器。如果您已运行 Red Hat Fuse 命令 shell,您可以调用 console 命令来连接到远程容器。或者,您可以在命令行中直接运行实用程序来连接到远程容器。
16.2.1. 从远程容器连接到独立容器
16.2.1.1. 概述
任何容器的命令控制台都可用于访问远程容器。使用 SSH 时,本地容器的控制台作为远程容器的命令控制台连接到远程容器,并作为命令控制台连接。
16.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
。有关更改端口号的详情,请查看 第 16.1.2 节 “配置独立容器以进行远程访问”。 hostname
- 运行远程容器的机器的主机名。有关更改主机名的详情,请查看 第 16.1.2 节 “配置独立容器以进行远程访问”。
我们建议您在 etc/users.properties
文件中自定义用户名和密码。
如果您的远程容器部署在 用于 SPARC 实例的 Oracle VM Server 上,则默认的 SSH 端口值 8101
已被逻辑卷管理器守护进程占用。在这种情况下,您需要重新配置容器的 SSH 端口,如 第 16.1.2 节 “配置独立容器以进行远程访问” 所述。
要确认您已连接到正确的容器,请在 Karaf 控制台提示符处键入 shell:info
,这将返回有关当前连接实例的信息。
16.2.1.3. 断开与远程控制台的连接
要断开与远程控制台的连接,请在提示符后输入 logout
或按 Ctrl+D。
您将与远程容器断开连接,控制台将再次管理本地容器。
16.2.2. 使用客户端命令行实用程序连接到容器
16.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
16.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
登录 容器,这表明您的容器不安全,您必须执行相应的步骤来在生产环境中修复此问题。
16.2.2.3. 断开与远程客户端控制台的连接
如果您使用远程客户端打开远程控制台,而不是使用它传递命令,则需要与其断开连接。要断开与远程客户端的控制台的连接,请在提示符后输入 logout
或按 Ctrl-D。
客户端将断开连接并退出。
16.2.3. 使用 SSH 命令行工具连接到容器
16.2.3.1. 概述
您还可以使用 ssh
命令行工具(类似 UNIX 的操作系统的标准实用程序)登录到红帽 Fuse 容器,其中身份验证机制基于公钥加密(必须首先在容器中安装公钥)。例如,如果容器被配置为侦听 TCP 端口 8101,您可以按如下方式登录:
ssh -p 8101 jdoe@localhost
目前仅在独立容器上支持基于密钥的登录,不支持 Fabric 容器。
16.2.3.2. 先决条件
要使用基于密钥的 SSH 登录,必须满足以下先决条件:
-
容器必须独立(不支持 Fabric),并且安装了
PublickeyLoginModule
。 - 您必须已创建了 SSH 密钥对(请参阅 第 16.2.3.4 节 “创建新的 SSH 密钥对”)。
- 您必须从 SSH 密钥对安装公钥到容器中(请参阅 第 16.2.3.5 节 “在容器中安装 SSH 公钥”)。
16.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 密钥 不起作用。
16.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 不支持使用加密的私钥。
16.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,admin
不要在此处插入 id_rsa.pub
文件的整个内容。插入代表公钥本身的符号块。
16.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
。使用这个配置,您可以使用用户名/密码凭证或公钥凭证登录到容器。
16.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
角色。
16.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
实用程序将提示您输入密语。