LLMで生成。以下を~/.zshrcに追加する。

function ssh() {
  local args=("$@")
  local iTermHost=""

  # (1) 引数をざっと解析して「ホストっぽいもの」を探す
  #     - 「--」が来たらオプション解析は終わり
  #     - `-xxx` のようなハイフンから始まるものはオプションとみなす
  #     - それ以外を見つけたら、それをホスト名候補として取り出す
  local parsingOptions=1

  for arg in "${args[@]}"; do
    # オプション解析の終了を示す "--" が来たらパース終了
    if [[ "$arg" == "--" ]]; then
      parsingOptions=0
      continue
    fi

    # まだオプションを解析中
    if [[ $parsingOptions -eq 1 ]]; then
      if [[ "$arg" =~ ^- ]]; then
        # ハイフンから始まればオプションとみなしてスキップ
        continue
      else
        # これがホスト名(もしくは user@host)だとみなして記録
        iTermHost="$arg"
        parsingOptions=0  # 一旦ホストが見つかったら解析終了
      fi
    else
      # すでにホスト名は見つかっているので無視 (command 部分など)
      break
    fi
  done

  # (2) user@host 形式ならホスト部だけ抜き出す
  if [[ "$iTermHost" == *@* ]]; then
    iTermHost="${iTermHost#*@}"  # user@host → host
  fi

  # (3) バッジを設定(iTerm2 以外の場合は何もしなくてもOK)
  if [[ -n "$iTermHost" ]]; then
    echo -ne "\033]1337;SetBadgeFormat=$(echo -n "$iTermHost" | base64)\a"
  else
    # ホスト名がとれなかった場合、空にする or 何もしないなど好みで
    echo -ne "\033]1337;SetBadgeFormat=$(echo -n "" | base64)\a"
  fi

  # (4) 実際の ssh を呼び出す
  #     /usr/bin/ssh のパスはご自身の環境に合わせて修正
  /usr/bin/ssh "${args[@]}"

  # (5) SSH終了後にバッジをリセット(空にするなどお好みで)
  echo -ne "\033]1337;SetBadgeFormat=$(echo -n "" | base64)\a"
}