簡體   English   中英

使用SSH通過Java中的另一台服務器連接到服務器

[英]Connect using SSH to a server through another server in Java

當前,我們有2個Unix服務器A和B。要連接到B服務器,最初我們是先連接服務器A,然后在Unix提示符下使用SSH登錄到JumpHostB。

現在,我正在使用Java開發的簡單工具,該工具必須從服務器B下載文件。

在下面的鏈接中獲得的示例代碼中,如果我傳遞了B服務器的主機詳細信息,則主機連接失敗。

當我傳遞A服務器的主機詳細信息時,連接成功,並且能夠下載服務器A中存在的文件。

我需要有關如何通過Java連接到服務器A和服務器B以及如何從服務器B下載文件的指針。

SSH連接Java

您可以使用overthere庫。 首先導入依賴項:

<dependency>
    <groupId>com.xebialabs.overthere</groupId>
    <artifactId>overthere</artifactId>
    <version>4.4.2</version>
</dependency>

...然后連接到服務器(A,B等):

ConnectionOptions options = new ConnectionOptions();
options.set(ConnectionOptions.PASSWORD, passwd);
options.set(ConnectionOptions.CONNECTION_TIMEOUT_MILLIS, connectionTimeout);
options.set(ConnectionOptions.USERNAME, login);
options.set(ConnectionOptions.ADDRESS, host);
options.set(ConnectionOptions.OPERATING_SYSTEM, OperatingSystemFamily.UNIX);
options.set(SshConnectionBuilder.CONNECTION_TYPE, SshConnectionType.SCP);
OverthereConnection connection = Overthere.getConnection(SshConnectionBuilder.SSH_PROTOCOL, options);

您真正要尋找的是Overthere Jumpstation中的功能。

您想要這樣連接:客戶端->服務器A->服務器B

使用overthere可以按如下方式建立該連接:

ConnectionOptions jumpStationOptions = new ConnectionOptions();
jumpStationOptions.set(ConnectionOptions.ADDRESS, "Server A");
jumpStationOptions.set(ConnectionOptions.USERNAME, "Username A");
jumpStationOptions.set(ConnectionOptions.PASSWORD, "Password A");
jumpStationOptions.set(ConnectionOptions.PROTOCOL, "ssh-jumpstation");
jumpStationOptions.set(ConnectionOptions.OPERATING_SYSTEM, OperatingSystemFamily.UNIX);
ConnectionOptions options = new ConnectionOptions();
options.set(ConnectionOptions.PASSWORD, "Password B");
options.set(ConnectionOptions.USERNAME, "Username B");
options.set(ConnectionOptions.ADDRESS, "Server B");
options.set(ConnectionOptions.OPERATING_SYSTEM, OperatingSystemFamily.UNIX);
options.set(SshConnectionBuilder.CONNECTION_TYPE, SshConnectionType.SCP);
options.set(ConnectionOptions.JUMPSTATION, jumpStationOptions);
OverthereConnection connection = Overthere.getConnection(SshConnectionBuilder.SSH_PROTOCOL, options);

此設置會將“服務器A”配置為用作到達“服務器B”的跳轉站。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM