我正在尝试通过Java代码将AWS Windows实例与CIFS或WinRM连接,我不必使用SMB协议。我不确定是否可能。
在实例WinRM服务正在运行并且为了测试我已允许所有流量作为入站实例。
我想在这个实例上复制一些文件,以及我想使用这个java代码运行一些bash脚本。
我用CIFS试过 xebialabs/overthere 。
以下代码库我尝试实现但面临一些问题(所有主机属性都在那里)
ConnectionOptions options = new ConnectionOptions();
options.set(ConnectionOptions.OPERATING_SYSTEM, OperatingSystemFamily.WINDOWS);
options.set(CifsConnectionBuilder.CONNECTION_TYPE, CifsConnectionType.WINRM_INTERNAL);
options.set(CifsConnectionBuilder.WINRM_TIMEMOUT, "PT172800.000S");
options.set(ConnectionOptions.CONNECTION_TIMEOUT_MILLIS, 900000);
options.set(ConnectionOptions.SOCKET_TIMEOUT_MILLIS, 900000);
options.set(CifsConnectionBuilder.WINRM_ENABLE_HTTPS, false);
options.set(CIFS_PORT, CIFS_PORT_DEFAULT);
options.set(ConnectionOptions.PROTOCOL, CIFS_PROTOCOL);
// Host Properties
options.set(ConnectionOptions.ADDRESS, host);
options.set(ConnectionOptions.USERNAME, user);
options.set(ConnectionOptions.PASSWORD, password);
AddressPortMapper mapper = DefaultAddressPortMapper.INSTANCE;
OverthereFile workingDirectory = null;
WinrsConnection connection = new WinrsConnection(options, mapper, workingDirectory);
connection.connect();
错误:
线程“main”中的异常java.lang.IllegalArgumentException:无法在ot上的com.xebialabs.overthere.winrs.WinrsConnection.connect(WinrsConnection.java:89)中创建与未运行Windows的winrs代理的smb:winrm_native连接。在ot.OtPOC.main(OtPOC.java:16)的ot.WinRmUtils.getNewWinRMConnection(WinRmUtils.java:89)的WinRmUtils.getWinRmConnection(WinRmUtils.java:76)
我也试过cloudsoft/winrm4j但这也行不通。
在配置中,您正在配置CifsConnectionType.WINRM_INTERNAL
,而您正在实例化WinrsConnection
。更喜欢使用工厂方法Overthere.getConnection(CifsConnectionBuilder.CIFS_PROTOCOL, config)
,或直接实例化WinrmConnection
。
WinrsConnection
(或CifsConnectionType.WINRM_NATIVE
)仅适用于Windows-2-Windows连接,因为它使用winrs.exe
命令来执行WinRM命令。
WinrmConnection
(或CifsConnectionType.WINRM_INTERNAL
)适用于所有连接,因为它完全用Java实现。