SSH是访问远程计算机,传输数据和执行远程命令的一种简单而安全的方法。除了基础的交互模式外,还有许多依赖于ssh Client/Server架构的工具可以实现自动化执行远程任务。我们可以找到ssh客户端的许多实现,但是如何从代码编程访问ssh提供的功能呢?本文介绍JAVA语言中使用ssh功能的方法。
JSch是一个用Java实现ssh协议的项目。借助它的帮助,您可以构建应用程序连接到远程或本地SSH服务器并与之交互。这样,您的应用程序就可以使用本机ssh客户端在目标计算机上完成绝大部分功能。
在本文中,我们将把JSch导入Java项目中,并编写少量必要代码来创建一个可以登录到远程计算机的ssh服务器应用程序,在远程交互式 shell 中执行一些命令、关闭会话、然后显示输出。
在本教程中,您将学习:
如何将JSch导入Java项目
如何设置测试环境
如何在自定义类中实现UserInfo接口
如何编写启动交互式ssh会话的应用程序

图:JSch示例执行。
介绍
我们将开发一个基于JSch的JAVA应用程序,它将通过ssh使用用户名test和密码test登录到localhost。我们假定ssh服务器侦听默认端口22,并且接受服务器的指纹而不会检查其有效性。成功登录后,我们将执行一些命令,然后打印收到的所有输出。
我们的工具将包括Fedora桌面(作为客户端和服务器),最新的NetBeans IDE以及(在撰写本文时)最新的稳定版JSch。但是请注意,这些只是选择的工具。 Java是跨平台或者说平台独立的,目标服务器可能在地球的另一端,可以是任何正常运行ssh server的操作系统。
设置测试环境
在示例中,我们需要一个名为"test"的用户,其密码为"test"。我们还需要一个正在运行的ssh服务器。
添加测试用户
我们将以root身份执行useradd:
# useradd test
并设置新用户的密码:
# passwd test
在这里,我们需要提供两次以上的密码。注意:这个简单账号密码适用于临时的环境,最好是外界无法访问的测试环境,如果是在极有可能不受控制的访问时,为了安全起见,请勿使用容易猜到的密码。
检查SSH服务器
我们可以使用systemd检查状态ssh server:
# systemctl status sshd
如果它没有运行,请启动它:
# systemctl start sshd
在台式机上,可能需要执行此步骤,因为其中某些设置在默认情况下不会运行ssh服务器。
测试与本机客户端的连接
如果设置好了用户且该服务正在运行,则我们应该能够使用以上信息登录:
$ ssh test@localhost
我们需要接受主机的指纹并提供密码。如果登陆成功并进入 shell ,那么我们的测试环境就准备好了。
获取并将JSch导入我们的项目










