我创建了一个 Amazon Linux 2 实例,我在其中部署了一个使用 systemd 启动的 Java 程序。Java 程序是一个 vertx-shell 应用程序,它使用 Apache Mina 在端口 2000 上启动 SSH 服务器。应该可以通过 2 种方式连接到 SSH 服务器:公钥或密码验证。
在端口 22 上进行经典 ssh 身份验证以访问我的亚马逊实例后,我可以使用密码 auth 连接到在本地端口 2000 上运行的 java ssh 服务器。但是,当我尝试从提供 Amazon 私钥的本地计算机连接到 SSH 服务器时,连接卡在“ debug1:本地版本字符串 SSH-2.0-OpenSSH_7.5 ”行,并在 2 分钟超时后最终被拒绝:
ssh -i /Users/toto/.ssh/my_amazon_key.pem -p 2000 ec2-user@my-application.server.com -vvv
OpenSSH_7.5p1, LibreSSL 2.5.4
debug1: Reading configuration data /Users/toto/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 52: Applying options for *
debug2: resolving "my-application.server.com" port 2000
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to my-application.server.com [35.XXX.XX.XX] port 2000.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /Users/toto/.ssh/my_amazon_key.pem type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/toto/.ssh/my_amazon_key.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.5
ssh_exchange_identification: Connection closed by remote host
在 Java 应用程序日志中,我可以看到有人试图连接到 SSH 服务器,但 2 分钟后未能通过身份验证。
当然,我已经在我的亚马逊安全组中检查了我已经打开了 2000 端口。在我的情况下,没有拒绝 IP。
这是运行 SSH 服务器的 Java 代码:
ShellService service = ShellService.create(vertx,
new ShellServiceOptions()
.setTelnetOptions(
new TelnetTermOptions().
setHost("localhost").
setPort(5000))
.setSSHOptions(
new SSHTermOptions().
setHost("0.0.0.0").
setPort(2000).
setKeyPairOptions(new JksOptions().
setPath("ssh/keystore.jks").
setPassword("wibble")).
setAuthOptions(new ShiroAuthOptions().
setConfig(new JsonObject().put("properties_path", "classpath:ssh/auth.properties"))))
);
任何的想法 ?Vertx/Apache Mina 配置?在端口 22 和端口 2000 上运行的 SSHD 之间是否存在冲突?