我正在用Java编写程序,使用套接字与Telnet服务器通信,该服务器允许用户访问UNIX OS中的文件目录。
当使用Putty与此服务器通信时,它会提示我输入我的用户名和密码,但是使用我的套接字除了声明它使用SSH 2.0的字符串外,服务器没有任何内容 - 我认为。
我确定这与Telnet协议有关,但如何让服务器询问我的用户名和密码。在UNIX环境中,为了访问文件目录,我需要提供哪些命令才能访问服务器?
的校正 的: 我认为它实际上是在端口22上使用SSH。可以使用Putty或Microsoft Windows的Telnet程序访问它,但它实际上并不使用Telnet协议而是使用SSH协议。
答案 0 :(得分:2)
SSH不是telnet。 SSH是一种很像telnet的协议,但它是加密的,并且具有许多其他功能。所以看起来你期待一个纯文本交换,但你得到的是尝试握手的ssh协议。
Telnet在端口23上运行,SSH在22上运行。我想你想要使用23.注意:Telnet是旧的,没有加密,并且在互联网上使用是危险的(除非你通过VPN或加密会话的东西)。
答案 1 :(得分:1)
对于大多数用途,Telnet协议实际上没有任何内容......有关详细信息,请参阅this page。如果另一端的服务器正在尝试协商SSL连接,这是目前最有可能的事情,请尝试使用java.net.ssl.SSLSocket
而不是裸TCP套接字。
一旦您协商了连接(请参阅上面链接的文档),您应该基本上将UNIX CLI命令打印到套接字并读取(并解析)结果。如果您只想访问文件,可以使用FTP代替。大多数现代服务器都支持SFTP。
修改强>
稍微戳了一下,我发现直接使用SSLSocket连接到SSH服务器很麻烦,因为SSH有自己的协议。你可能不想重新发明轮子。查看一些纯Java SSH客户端库的this question答案。您可以使用至少其中一个来直接解决问题,而不是通过SSH发送文本命令。
答案 2 :(得分:0)
它是telnet
服务器,它很简单。
但你拥有的是ssh
服务器,这很好。 telnet被大量弃用,因为它没有加密。
您现在有两个选择:使用ssh库或通过其stdio访问ssh命令行客户端(或在Windows下:plink
程序)。