【问题标题】:Communicating with an SSH Server for file access using pure Java使用纯 Java 与 SSH 服务器通信以进行文件访问
【发布时间】:2011-11-06 20:35:15
【问题描述】:

我正在用 Java 编写一个程序,使用套接字与 Telnet 服务器通信,该服务器允许用户访问 UNIX 操作系统中的文件目录。

当使用 Putty 与该服务器通信时,它会提示我输入用户名和密码,但使用我的套接字时,服务器除了表示它使用 SSH 2.0 的字符串之外什么都没有——我想。

我确定这与 Telnet 协议有关,但是如何让服务器询问我的用户名和密码。为了在 UNIX 环境中访问文件目录,我需要向服务器提供哪些命令集?

更正: 我想它实际上是在端口 22 上使用 SSH。可以使用 Putty 或 Microsoft Windows 的 Telnet 程序访问它,但它实际上并不使用 Telnet 协议,而是使用 SSH 协议。

【问题讨论】:

    标签: java sockets unix ssh telnet


    【解决方案1】:

    SSH 不是远程登录。 SSH 是一种与 telnet 很相似的协议,但它是加密的并且具有许多其他功能。所以看起来你期待的是纯文本交换,但你得到的是 ssh 协议试图进行握手。

    Telnet 在 23 端口上运行,SSH 在 22 上运行。我想你想使用 23。注意:Telnet 是旧的,未加密的,在互联网上使用很危险(除非你通过 VPN 或加密会话的东西)。

    【讨论】:

    • 其实我正在尝试使用22端口。我感觉我必须使用ssh而不是Telnet,但根据其他人的帖子,看起来这种怀疑可能是正确的.我将不得不去研究 SSH 协议,因为我认为服务器不会让我使用标准 Telnet 使用 UNIX 文件系统。
    【解决方案2】:

    对于大多数用途而言,Telnet 协议实际上没有任何内容...有关详细信息,请参阅this page。如果另一端的服务器正在尝试协商 SSL 连接,这是目前最有可能发生的事情,请尝试使用 java.net.ssl.SSLSocket 而不是裸 TCP 套接字。

    一旦您协商连接(请参阅上面链接的文档),您实际上应该将 UNIX CLI 命令打印到套接字并读取(并解析)结果。如果您只想访问文件,则可以改用 FTP。大多数现代服务器将支持SFTP

    编辑

    稍微戳了一下,我发现直接使用 SSLSocket 连接到 SSH 服务器充其量是很麻烦的,因为 SSH 有自己的协议。你可能不想在那个上重新发明轮子。查看this question 的答案,了解一些纯 Java SSH 客户端库。与通过 SSH 发送文本命令相比,您可能至少可以使用其中一种来更直接地解决您的问题。

    【讨论】:

      【解决方案3】:

      它会是一个telnet 服务器吗?很简单。

      但是您拥有的是ssh 服务器,这很好。 telnet 已被严重弃用,因为它没有加密。

      您现在有两个选择:使用 ssh 库或通过其 stdio 访问 ssh 命令行客户端(或在 Windows 下:plink 程序)。

      【讨论】:

      • 是的。 Java 可能可以访问ssh 库,并且还能够启动像plink 这样的外部进程。我在 Python 中完成了后者,我相信在 Java 中也是如此。
      猜你喜欢
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2012-09-02
      相关资源
      最近更新 更多