Skip to content

Instantly share code, notes, and snippets.

@ashevchuk
Last active May 7, 2024 00:17
Show Gist options
  • Save ashevchuk/74f7273e5f8e9868d36b1757e18f9d69 to your computer and use it in GitHub Desktop.
Save ashevchuk/74f7273e5f8e9868d36b1757e18f9d69 to your computer and use it in GitHub Desktop.
Aster MegaRAC IPMI q&d fix for broken iKVM jviewer.jnlp
#!/bin/sh
if [ "$#" -ne 3 ]; then
echo "Usage: $0 [ip address] [user name] [password]"
exit 1
fi
IP=$1
IPMI_USER=$2
IPMI_PASS=$3
OUTFILE=/tmp/${IP}_jviewer.jnlp
COOKIE=$(curl "http://${IP}/rpc/WEBSES/create.asp" --silent --raw --data "WEBVAR_USERNAME=${IPMI_USER}&WEBVAR_PASSWORD=${IPMI_PASS}" -o - | perl -ne "m/\'SESSION\_COOKIE\'\s\:\s\'(.*?)\'/sg ? print \$1 : ();")
TOKEN=$(curl "http://${IP}/rpc/getsessiontoken.asp" -H "Cookie: SessionCookie=${COOKIE}" --silent --raw -o - | perl -ne "m/\'STOKEN\'\s\:\s\'(.*?)\'/sg ? print \$1 : ();")
(
cat <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://${IP}/Java">
<information>
<title>JViewer</title>
<vendor>American Megatrends, Inc.</vendor>
<description kind="one-line">JViewer Console Redirection Application</description>
<description kind="tooltip">JViewer Console Redirection Application</description>
<description kind="short">
JViewer enables a user to view the video display of managed server via KVM.
It also enables the user to redirect his local keyboard, mouse for managing the server remotely.
</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+"/>
<jar href="release/JViewer.jar"/>
</resources>
<resources os="Windows" arch="amd64">
<j2se version="1.5+"/>
<nativelib href="release/Win64.jar"/>
</resources>
<resources os="Windows" arch="x86">
<j2se version="1.5+"/>
<nativelib href="release/Win32.jar"/>
</resources>
<resources os="Linux" arch="x86">
<j2se version="1.5+"/>
<nativelib href="release/Linux_x86_32.jar"/>
</resources>
<resources os="Linux" arch="i386">
<j2se version="1.5+"/>
<nativelib href="release/Linux_x86_32.jar"/>
</resources>
<resources os="Linux" arch="x86_64">
<j2se version="1.5+"/>
<nativelib href="release/Linux_x86_64.jar"/>
</resources>
<resources os="Linux" arch="amd64">
<j2se version="1.5+"/>
<nativelib href="release/Linux_x86_64.jar"/>
</resources>
<application-desc>
<argument>${IP}</argument>
<argument>7578</argument>
<argument>${TOKEN}</argument>
<argument>${COOKIE}</argument>
</application-desc>
</jnlp>
EOF
) > $OUTFILE
javaws -nosecurity -jnlp $OUTFILE >/dev/null & disown && sleep 1 && rm -f $OUTFILE
@igorekdp
Copy link

After update BMC to version 7012 we can download work jnlp file and connect to server

Firmware BMC: https://www.tyan.com/Motherboards=S7012=S7012WGM4NR=downloads=EN (solution find there https://serverfault.com/questions/309950/i-keep-getting-an-ipmi-error-when-doing-console-redirection)

@igorekdp
Copy link

igorekdp commented Jul 29, 2022

<?xml` version="1.0" encoding="UTF-8"?>

<jnlp` spec="1.0+" codebase="http://10.20.52.11/Java">
    <information>
        <title>JViewer</title>
        <vendor>American Megatrends, Inc.</vendor>
        <description kind="one-line">JViewer Console Redirection Application</description>
        <description kind="tooltip">JViewer Console Redirection Application</description>
        <description kind="short">
            JViewer enables a user to view the video display of managed server via KVM.  
            It also enables the user to redirect his local keyboard, mouse for managing the server remotely.
        </description>
    </information>
	<security>
		<all-permissions/>
	</security>
    <resources>
        <j2se version="1.5+"/>
        <jar href="release/JViewer.jar"/>
    </resources>
    <resources os="Windows" arch="amd64">
       <j2se version="1.5+"/>
       <nativelib href="release/Win64.jar"/>
    </resources>
    <resources os="Windows" arch="x86">
    	<j2se version="1.5+"/>
    	<nativelib href="release/Win32.jar"/>
    </resources>    
    <resources os="Linux" arch="x86">
    	<j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_32.jar"/>
    </resources>    
    <resources os="Linux" arch="i386">
    	<j2se version="1.5+"/>
        <nativelib href="release/Linux_x86_32.jar"/>
    </resources>
    <resources os="Linux" arch="x86_64">
            <j2se version="1.5+"/>
    <nativelib href="release/Linux_x86_64.jar"/>
    </resources>
    <resources os="Linux" arch="amd64">
            <j2se version="1.5+"/>
    <nativelib href="release/Linux_x86_64.jar"/>
    </resources>
    <resources os="Mac OS X" arch="i386">
        <j2se version="1.5+"/>
        <nativelib href="release/Mac32.jar"/>
    </resources>
    <application-desc>
        <argument>10.20.52.11</argument>
        <argument>7578</argument>
        <argument>l09mePTM4wWfnhDQ�<argument>6R3x1K8UQblHNFUEDMakCtqCZ2RXkpci003</argument>
</argument>
    </application-desc>
</jnlp>

@joaormatos
Copy link

joaormatos commented May 7, 2024

A way to avoid using Webstart and having to deal with its security policies is to run the main JAR directly with Java.

Manually grab the main JAR (JViewer.jar) and the JAR with the native libs for your platform, extracting the native libs JAR into some directory (say, "libs"; it just contains shared libraries) and then run something like:

LD_LIBRARY_PATH="$PWD/libs" java -jar JViewer.jar

Just add the arguments that you'd see getting passed in the jnlp.
Namely, the BMC IP address, the port (7578) and any token/cookies.

Taking the jnlp in the previous comment as example:

wget http://10.20.52.11/Java/release/JViewer.jar
wget http://10.20.52.11/Java/release/Linux_x86_64.jar
mkdir libs
unzip -d libs Linux_x86_64.jar
LD_LIBRARY_PATH="$PWD/libs" java -jar JViewer.jar 10.20.52.11 7578 $'l09mePTM4wWfnhDQ\002' 6R3x1K8UQblHNFUEDMakCtqCZ2RXkpci003

I tested this method with a Tyen S7002. It only provides 32 bit versions of native libs, so I did this in a dedicated 32 bit Debian bookworm VM.
Seems to work fine on the distro's current openjdk JRE (version 17.0.11), but I didn't do any extensive tests.
It would probably work fine on an x86_64 system with multilib, as long as you used a 32 bit JRE.

Also note that you may run into a problem where the BMC system hits some limit in the number of sessions/tokens and will stop giving you additional tokens. Avoid spamming the same BMC with requests while debugging your scripts or risk getting locked out of using KVM for that host.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment