先看看telnet 和ssh的定义:
Telnet协议是TCP/IP协议中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
SSH是一个用来替代TELNET、FTP以及R命令的工具包,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。 SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
实际上,telnet和ssh的功能基本相同,都是实现远程登陆的网络协议。
和其他多数协议一样, java 中telnet ssh的实现也要经过三部曲:建立连接、使用连接 和释放连接 。ssh是用以替换telnet 的一种协议,在java 编程中 ,ssh和telnet 的不同仅仅表现在建立连接和释放连接中。
使用连接的过程,其实就是发送命令和远程服务器交互的过程,原理也很简单:每向服务器发送一条命令,就等待服务器执行此命令后返回的字符流,暂且把它叫做一次交互。我们以在规定时间内接收这些字符流,如果这些字符流中出现了“命令提示符”,说明服务器处于等待状态,我们就认为此次交互完成,否则,此次交互失败,出现异常。
linux服务器上的命令提示符不多,登陆命令提示符就更有限了,一般就包括 用户名提示符、密码提示符 和登陆成功提示符(也叫命令提示符)这三类,不同linux的用户命令提示符、密码提示符也会稍有不同。
下面简单写一个程序做telnet的测试,此程序仅作测试,所以很多写法并不规范。
(1)所需包:commons-net-2.2.jar
(2)代码如下:
ssh 的实现和和 telnet 大同小异,差别在于建立连接和释放连接:
(1)需要包:jsch-0.1.42.jar
(2) 关键代码如下:
其中 defaultUserInfo 是实现了UserInfo的一个类对象:
介绍完毕,欢迎提出宝贵意见!