-
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
base: master
Are you sure you want to change the base?
Conversation
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
|
d30a997
to
e88181e
Compare
TODO:
|
dbcb8eb
to
1dc88a3
Compare
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]>
- 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]>
Yet one bug detected (I created it): NIO Path uses '' as a separator, not '/', so it fails to use SFTP protocol now. |
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.
Automated test
Manual test
Windows Server 2025 Configuration
I hope I did not skip something, but I tried to collect command line executions done to prepare everything. It is a bit longer, so I will add that to discussions, see #25343
DAS Script
Test Script
The passwordfile.txt contains just this:
Execution
You need three console windows:
Window 1: cd glassfish project, clone from github, and build and run automated tests:
Window 2, start DAS and print the server.log:
Window 3, execute the test scenario. It will ask three times for password, which is
admin123
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 for another PR, however I replaced allnone
values byaccept-new
, because it is still better than not doing any validation. User can do the validation manually first, than DAS does not override it.DAS side: JSCH SSH Implementation