-
Notifications
You must be signed in to change notification settings - Fork 148
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Making SSH Nodes work both on Linux and Windows based systems #25291
Draft
dmatej
wants to merge
19
commits into
eclipse-ee4j:master
Choose a base branch
from
dmatej:windows-ssh
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dmatej
changed the title
Making SSH Nodes working reliably both on Linux and Windows based systems
Making SSH Nodes work both on Linux and Windows based systems
Dec 17, 2024
pzygielo
reviewed
Dec 17, 2024
pzygielo
reviewed
Dec 17, 2024
pzygielo
reviewed
Dec 17, 2024
Local status: Large refactoring targeting File vs Path vs String vs SFTP vs Unix vs Windows. Local manual testing of DAS on Kubuntu and Node on Windows Server 2025 - was able to "replicate" glassfish installation, unpack, create node and instance. Instance did not start yet as I did not install Java to Windows yet :-) TODO
|
OndroMih
reviewed
Jan 3, 2025
dmatej
force-pushed
the
windows-ssh
branch
2 times, most recently
from
January 17, 2025 20:07
d30a997
to
e88181e
Compare
TODO:
|
Signed-off-by: David Matějček <[email protected]>
Signed-off-by: David Matějček <[email protected]>
- prefer unzip, if not detected, use jar Signed-off-by: David Matějček <[email protected]>
- Because Eclipse Jenkins CI does not support TestContainers while GitHub Actions do. - Synced Ubuntu and Windows workflow Signed-off-by: David Matějček <[email protected]> # Conflicts: # .github/workflows/build-windows.yml
- The server-config used "nointeractive", while default used "--noshutdown -c noop=true" options Signed-off-by: David Matějček <[email protected]>
- SFTP uses "linux-like" paths, while Windows uses different separators and all systems may use also different root for SFTP. Signed-off-by: David Matějček <[email protected]>
- Added PATH and JAVA_HOME to user environment - Disabled AS_TRACE - UsePAM set to yes to enable /etc/environment - INFO ssh server log level Signed-off-by: David Matějček <[email protected]>
Signed-off-by: David Matějček <[email protected]>
- Windows is killing everything started in the session - The only workaround found after 2 weeks of experiments, googling, consultation with GitHub CoPilot is this - to create two scripts executed by the Windows Scheduler just once. - Added also nohup for Linux nodes. Signed-off-by: David Matějček <[email protected]>
Signed-off-by: David Matějček <[email protected]>
- DAS host can have multiple network endpoints but not all accessible from the node host. Once we are able to establish the connection, we can also use the socket's local address as the host. - Note: This can be much more complicated, this is rather a quick fix or simple workaround. Proper solution is to have the DAS host used by the node configurable. Signed-off-by: David Matějček <[email protected]>
… system - SSHLauncher is stateless and NOT injectable; collects information about the target system. - new SSHSession - wraps the jsch session - SFTPClient - responsible for file system changes - chmod is not supported on windows - all stateful objects are closeable -> no need to keep them in SSHUtil Signed-off-by: David Matějček <[email protected]>
- If the host name is not good enough, we will prefer chosen IPv4 address. - Would be better to let it on the user which hostname or IP should represent the node and DAS, however that goes over this pull request. Signed-off-by: David Matějček <[email protected]>
Signed-off-by: David Matějček <[email protected]>
- The gfstart.bat must be there from the last start, so we don't need to generate the command again. - Permissions to use the scheduler depend on the windows session type. - Killing of started programs also depends on the windows session type - Closing streams doesn't resolve issues, it seems it causes some. - I have doubts about all solutions related to Windows OS, so I tried to minimize it as much as possible. Also I tried to learn as much as possible. Signed-off-by: David Matějček <[email protected]>
- Tested via SSH and locally - Tested on domains and instances - Very probably can be simplified later, especially problematic is hard coded timeout in the generated ps1 script. Signed-off-by: David Matějček <[email protected]>
- The bat script reads from a temp file given Signed-off-by: David Matějček <[email protected]>
- We don't need to wait for the end of the server in startup scripts. Signed-off-by: David Matějček <[email protected]>
Signed-off-by: David Matějček <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
TBD: Update description. Please try to review "per commit" - it is a lot of changes, tested on Kubuntu host and Windows Server 2025 in VirtualBox. I know it works, however I could make some mistakes.
When I implemented these tests I had to face quite a lot of issues even on Linux. When I finish, I will write some blog about it, it is another painful episode. However I have to make notes and it will be useful also for users and reviewers. In short:
Assumptions of the test
create-node-ssh --install
to "clone" GlassFish installation to another machine.Node side: Environment
jar
is not on PATH everywhereNode side: SSHD Configuration
DAS side: Environment
ssh
command is usefulsshpass
command. Test uses it, however GlassFish uses Jsch library instead.DAS side: SSH Command Configuration
"''"
means apostrophes, not empty passphrase.sshd
)StrictHostKeyChecking=accept-new
should not be used on production; however would be useful if we would not enforce user to run the ssh command on his own and manually accept the server's key. That is TODO.DAS side: JSCH SSH Implementation