繁体   English   中英

像 PuTTy 这样的 Java SSH 客户端

[英]Java SSH Client like PuTTy

所以,我想创建我自己的 SSH 客户端,不仅仅是发送命令,而是一个完整的 ssh 客户端供我使用,就像您使用 PuTTy 或 mobaxterm 一样,这里有人可以指出我正确的方向吗?

我尝试/想到的事情: - 使用 Jsch 发送和执行命令(如果可能的话,我很想知道这是否能够在不使用 Jsch 的情况下完成)。

SSH 是一种定义为在 TCP 之上运行的协议,您可以使用java.net.Socket类在 java 中建立 TCP 连接。

所以,是的,这是可以做到的。

你必须自己实现协议(或使用 JSch 来实现,但考虑到所有这些工具已经存在,而且它是安全的,通常依赖广泛使用的工具比依赖手写更智能东西,考虑到安全漏洞很难测试——我认为这是一种纯粹顽固的傲慢的练习,或者更可能是一种学习练习,这意味着你不想在这里使用 jsch ).

ssh 通过在网络上发送任意数量的加密流来工作。 默认情况下,有一个流(双向流),用户的 shell 在一端(例如/bin/bash可执行文件)和一个终端(您键入的内容构成输入,并且任何输出都会回显到终端窗口)。

ssh 不会等待您键入命令然后运行它; 那是/bin/bash做的。 这是基本的 linux 信息,与 ssh(协议)没有直接关系,这正是您所习惯的,因为 sshd(形成 ssh 服务器的 linux 可执行文件)默认情况下将您的终端连接到目标服务器的 shell 可执行文件. 通常是狂欢。

鉴于您对此一无所知,这听起来像是一个作为入门实验有点牵强的项目,但我将根据不完整的信息进行评估。

我将从制作一个简单的 telnet 客户端和服务器开始。 telnet 在这一点上已经非常过时了,但它基本上是 ssh,没有流的多路复用,也没有加密。 如果您不会编写 telnet 客户端,那么您也不会编写 ssh 客户端。 您仍然可以在 linux 机器上启动 telnet 服务器以进行测试。

一旦你明白了这一点,就开始弄清楚加密和多路复用*。

*) 使用 ssh,您可以在打开 shell 的同时进行端口转发等; 查看标准 ssh 中的-R-L-D选项。 每个这样的选项都允许一起发送另一个流。 (当您发送 shell 命令并查看它们的结果时,同时,通过相同的 ssh 连接,您正在向另一台机器网络中的打印机发送打印作业)。 通过单个连接发送多个流称为“多路复用”,它是 ssh 规范的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM