この記事を作った動機

 最近、なんか公開鍵認証で鍵を登録したのにパスワードを求められたり、あるいは完全に特定のPCにおいて、SSH ログインが動作しているPCと設定が同じであるにもかかわらずログインできなかったりと、色々振り回されていることについて、いい加減対応しようと思い調べた。それで色々手こずったので、記録を残したい。

 結論としては、SSH クライアントなど OpenSSL 周りはどんどん新しくなっていき、古い認証用バイナリは削除され、使えなくなることが時間の問題であることが分かった。SSH ログインによる ILO4 制御を諦めたほうが良いという結論になった。今まで SSH で管理してきたという背景からは、CLI で動く SSH であることが望ましかった。しかし、現実的な妥協点が、Selenium を使って ILO4 の Web インターフェースを自動化するか、RESTfulAPI を使って curl コマンドで ILO を HTTP により操作するということに至った。

環境

  • HPE Proliant Gen9 シリーズに搭載されている、ILO4 について。
  • ILO4 のバージョン
iLO 	Feb 06 2023 	2.82 
  • ILO4 は LAN 内で動作しており、グローバル空間に直接つながっていない閉鎖的な環境下であり、SSH の暗号化がそれほど重要でない場面を想定

具体的な経緯など

 組み込み機器にある SSH サーバはその用途に最適化されており、新しい規格についていけないところがある。いくらオプションを指定してももはや私が常用している Linux 環境の SSH クライアントではログイン不能であった。今までは、SSH クライアントに以下のオプションをつけることでゴリ押ししてログインできていたが、最近のアップデートの影響かできなくなったぽいことも、問題に本格的に取り組もうと思った動機であった。

    KexAlgorithms=+diffie-hellman-group14-sha1
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

 上記設定が通用した OpenSSL のバージョンと、通用しなくなったと思われるバージョンを以下に示す。

  • 通用するとき
openssl -v
OpenSSL 3.5.2 5 Aug 2025 (Library: OpenSSL 3.5.2 5 Aug 2025)
  • 通用しないとき
openssl -v
OpenSSL 3.6.3 9 Jun 2026 (Library: OpenSSL 3.6.3 9 Jun 2026)

試したことについて

RESTfulAPI と Curl コマンドを使う方法 (今回採用した手法)

 結局のところ、HTTP を介して行われる、RESTfulAPI を直接 curl コマンドで叩くのが現実的であるということになったが、自分でスクリプトを書いたわけではない。とにかく ILO4 経由でサーバの電源をリモートで気軽に入れたいだけだったため、ローカルLLM (Gemma4-12B-qat) に直接書かせた。最初はまあ動かない物を出してきたが、ネットから ILO4 RESTful API Reference のドキュメントを引っ張り出して、全部ではなくAuthentication and Sessionsあたりのセッションの文字列をヒントとして与えたところで、動作するスクリプトを手に入れることができた。パスワードなどの認証情報(機密情報)も与えて、とりあえず簡単に動くスクリプトを作るように指示できるのは、学習データに入力内容が使われるおそれも心配しなくていいローカル LLM 環境ならではであるようにも思う。

最終的に出てきた動くスクリプト (機密情報はブログ掲載用に上書きしてある)

#!/bin/bash

# Configuration
IP="192.168.x.x"
USER="userName"
PASS="password"

# Send the Power On command using Basic Authentication
# -k: Ignores SSL certificate errors
# -u: Provides the username and password
# -X POST: Tells curl to send a POST request
# -H: Sets the required Content-Type header
# -d: Sends the JSON data for the "On" action
curl -k -u "$USER:$PASS" \
     -X POST \
     -H "Content-Type: application/json" \
     -d '{"ResetType": "On"}' \
     "https://$IP/redfish/v1/Systems/1/Actions/ComputerSystem.Reset/"

echo "Power on command sent to $IP."

最初に出てきた動かないスクリプト (機密情報はブログ掲載用に上書きしてある)

#!/bin/bash

# Configuration
IP="192.168.x.x"
USER="userName"
PASS="password"

# 1. Login to iLO and save the session cookie to a file
# -k ignores the self-signed certificate warning
# -c saves the cookies
curl -k -c ilo_cookies.txt -X POST -d "username=$USER&password=$PASS" "https://$IP/mtls/login"

# 2. Send the Power On command using the saved cookie
# power_state=on is the standard command for iLO4
curl -k -c ilo_cookies.txt -X POST -d "power_state=on" "https://$IP/mtls/power_control"

echo "Power on command sent to $IP."

ilorest コマンドを使う方法 (機能しなかった)

 RESTfulAPI をガリガリ叩くスクリプトをドキュメントを見ながら作るのはめんどくさそうだったので、まずは既にあるツールを試そうとした。結果としては、少なくとも AUR にある ilorest コマンドはどちらも機能不全であり、使うことができず手動での修正が必要であるように見受けられ、割に合わないとなった。

 AUR (en) - ilorest については、そもそもビルド途中でコケてインストールさえできなかった。

yay -S ilorest

# ...
# ==> source で sha256sums ファイルを検証...
#     python_ilorest_library-7.3.0.0.tar.gz ... 失敗
# ==> エラー: ファイルが整合性チェックをパスしませんでした!
#  -> ビルド時にエラー: python-ilorest-library-exit status 1
# ==> パッケージを作成: ilorest 7.2.0.0-1 (2026年08月17日 06時22分46秒)
# ==> ランタイムの依存関係を確認...
# ==> 欠けている依存パッケージ:
#   -> python-ilorest-library
# ==> エラー: 全ての依存関係を解決できませんでした。
# ... 

 AUR (en) - ilorest-bin については、インストールこそできたものの、まずコマンドのパスが通っておらず、単にilorestとコマンドを打つだけでは起動できず、バイナリパスを/usr/bin/sbin/ilorestのように指定してようやく起動した。しかし、ログインしようとしたときに以下のようになって、結局"だめだこりゃ"となり今の時点では見捨てている。

/usr/bin/sbin/ilorest

# iLORest : RESTful Interface Tool version 7.3.0.0
# Copyright (c) 2014-2026 Hewlett Packard Enterprise Development LP
# --------------------------------------------------------------------------------------------------------------------
# 
# Both remote and local mode is accessible when RESTful Interface Tool is run as administrator. Only remote mode is available for non-admin user groups.
# iLORest > login [192.168.x.x] -u [userName] -p [password]
# Discovering data...Done
# Logging session out.
# ERROR	: Exception occurred while executing command.
# Traceback (most recent call last):
#   File "rdmc.py", line 697, in cmdloop
#   File "rdmc.py", line 429, in _run_command
#   File "extensions/COMMANDS/LoginCommand.py", line 128, in run
# rdmc_helper.PathUnavailableError: The path specified by the --path flag is unavailable.
# ERROR	: The path specified by the --path flag is unavailable.

# [xxxx] のところは秘匿しているところ

なんとか SSH ログインしようとする (諦めた)

 この記事を作った動機でも書いたように、この方法は諦めた。安定して同じ設定で再現性があるわけでもなく、ログインできないことは、ただでさえ色々オプションを指定しているにもかかわらず、CIA のうちの"正規ユーザによる可用性"を著しく欠いていると考えられた。ILO4 自体のファームウェアをいじって SSH サーバを更新することは、時間と手間がかかりすぎる点もある。一応試したことは以下のとおりである。どれもうまく行かなかった。正直ここまで特別な事をしても動かないということ自体が、もう ILO4 の管理において SSH を使うのは妥当ではないのではないかという発想に至らせた。

  • 従来調べたりして動いていて、最近機能しなくなったオプション
    KexAlgorithms=+diffie-hellman-group14-sha1
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
  • LLM (Gemma4-12B-qat) に問題を投げて、長い壁打ちの末提案してきたオプション
    KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
    Ciphers aes256-ctr,aes128-cbc,3des-cbc
    MACs hmac-sha1,hmac-sha2-256,hmac-md5
    PubkeyAcceptedAlgorithms +ssh-rsa
    HostKeyAlgorithms +ssh-rsa

使った画像とか

参考にしたサイトとか