18910140161

使用ssh登录远程服务器有两种方法:如何连接到远程服务器并构建ssh服务器

顺晟科技

2022-11-29 09:35:42

21

在此示例中,首先打开SSH连接,然后运行命令、读取输出并将其写入控制台,最后关闭SSH连接。我会让样本代码尽可能简单。

[] () 2.jsch

[JSch]()是SSH2的Java实现,允许连接到SSH服务器并使用端口转发、X11转发和文件传输。它还获得了BSD样式的许可,并提供了一种与Java建立SSH连接的简便方法。

首先,让我们向our _pom.xml_ file中添加[JSch Maven dependency]()条目。

Com.jcraft

Jsch

0.1.55

[]()使用2.1 JSch练习SSH连接。需要用户名、密码、主机URL和SSH端口。的默认SSH端口为22,但可能会出现这种情况。已将服务器配置为使用不同的端口进行SSH连接。

public static void list folders structure(字符串用户名、字符串密码、

字符串主机、int端口、字符串命令)出现异常{

Session session=空

ChannelExec channel=空

尝试{

会话=new jsch()。GetSession(用户名、主机、端口);

Session.setPassword(密码);

session . set config(' stricthostkeychecking ',' no ');

session . connect();

channel=(channel exec)session . openchannel(' exec ');

Channel.setCommand(命令);

Bytearray output stream响应流=new bytearray output stream();

channel . setoutputstream(response stream);

channel . connect();

While (channel.isConnected()) {

thread . sleep(100);

}

string responsestring=new string(response stream . to bytearray());

system . out . print ln(responsestring);

}最后一个{

在以下情况下(会话!=空){

session . disconnect();

}

如果(频道!=空){

channel . disconnect();

}

}

}

如代码所示,首先创建了客户端会话,并将其配置为连接到SSH服务器。然后,创建与SSH服务器通信的客户端通道,并提供通道类型——。在这种情况下为* exec *。也就是说,将shell命令传递给服务器。

此外,还必须为要记录服务器响应的通道设置输出流。使用*channel.connect()*方法建立连接时,将发送命令,并将收到的响应写入控制台。

让我们看一下如何使用JSch提供的各种配置参数。

StrihostKeyChecking指示应用程序确定是否可以在已知主机上找到主机公钥。此外,可用的参数值为_ask_、yes_和_no。其中_ask_为缺省值。如果将该属性设置为_yes_,则JSch不会自动将主机密钥添加到_known_hosts_ file,并拒绝连接到主机密钥已更改的主机。这将要求用户手动添加所有新主机。如果设置为No,JSch会自动将新主机密钥添加到已知主机列表中。

Compression。s2c指定从服务器到客户端应用程序的数据流是否使用压缩。可用值为_zlib_,_无_ value,第二个为默认值。

Compression。c2s客户端-指定是否对服务器方向的数据流使用压缩。可用值为_zlib_,_无_ value,第二个为默认值。

与服务器通信结束后,关闭会话和SFTP通道以防止内存泄漏至关重要。

[] () 3。Apachmina SSHD

[Apache MINA SSHD]()为基于Java的应用程序提供SSH支持。该库基于Apache MINA,这是一个可扩展的高性能异步I/o库。

再次[Apachmina SSHD Maven依赖关系]():

Org.apache.sshd

Sshd-核心

2.5.1

[] () 3.1练习我们来看一个使用Apache MINA SSHD连接到SSH服务器的代码示例。

public static void list folders structure(字符串用户名、字符串密码、

String host、int port、long defaultTimeoutSeconds、String command) IOException {

ssh client client=ssh client . setupdefaultclient();

client . start();

try(clientsessionsession=client . connect)(用户名、主机、端口)

.验证(defaultTimeoutSeconds、TimeUnit)。秒)。get session(){

Session.addPasswordIdentity(密码);

Session.auth()。验证(defaultTimeoutSeconds、TimeUnit)。秒);

try(bytearray output stream response stream=new bytearray output stream());

客户端通道通道=会话。创建通道(通道2.channel _ shell) {

频道。Setout(响应流);

尝试{

Channel.open()。验证(默认时间输出秒,时间单位。秒);

Try(管道输入输出流=通道。getinvertedin(){

管子进来了。写(命令。get bytes(););

管子进来了。flush();

}

频道。等待(枚举集。(客户端通道事件)。关掉,

时间单位10.25秒。tomillis(defaulttimeoutseconds);

字符串响应字符串=新字符串(响应流)。tobytearray(););

系统。出去。Println(响应字符串);

}最后一个{

频道。关(假);

}

}

}最后一个{

顾客。stop();

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航