[英]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.