転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2026:0707_20260707_01

ussh(ssh-dss対応)構築手順(Apple Silicon M4)

目的

macOS 標準 ssh の環境を汚染せず、古いネットワーク機器への接続に必要な ssh-dss を利用可能な独立バイナリ ussh を構築する。

今回構築するusshは以下を満たすものとする

  • 設定ファイルは ~/.ussh/config
  • known_hosts は ~/.ussh/known_hosts
  • ~/.ssh は一切使用しない
  • /etc/ssh/ssh_config も参照しない
  • static link(OpenSSL を make install しない)
  • Apple Silicon (arm64) 用
  • ussh は ~/bin/ussh に配置

OpenSSL 1.1.1wを利用する理由

  • OpenSSL 3.x / 4.x は DSA を完全に削除している
  • OpenSSH 9.x は DSA を OpenSSL に依存して実装している
  • そのため、OpenSSL 3.x / 4.x とリンクすると ssh-dss がビルド時に消滅する

結果、OpenSSL 1.1.1 系統しか選択肢がない。

ただし、OpenSSL 1.1.1は2023年9月11日にEoLを迎えているので、今後のUpdateはない。したがって、ssh-dssを利用するdeviceを早期に交換するか、telnetに頼るしかないことに注意。

必要ディレクトリの作成

$ mkdir -p ~/bin
$ mkdir -p ~/.ussh

OpenSSL(static)を取得・ビルド

OpenSSL 1.1.1w を取得

$ cd ~/Downloads
$ wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
$ tar zxf openssl-1.1.1w.tar.gz
$ cd openssl-1.1.1w
$ ./Configure darwin64-arm64-cc no-shared
$ make

生成物:

  • ./libcrypto.a
  • ./libssl.a
  • ./include/openssl/*

OpenSSH Portable を取得

$ cd ~/Downloads
$ wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
$ tar zxf openssh-9.7p1.tar.gz
$ cd openssh-9.7p1

~/.ssh → ~/.ussh に置換するパッチ適用

OpenSSH は設定ファイルの検索パスをソースコードにハードコードしているため、以下のファイルを修正する。

pathnames.h の修正

$ vi pathnames.h
- #define SSHDIR                          ETCDIR "/ssh"
+ #define SSHDIR                          "~/ussh"

- #define _PATH_SSH_PROGRAM               "/usr/bin/ssh"
+ #define _PATH_SSH_PROGRAM               "/usr/bin/ussh"

- #define _PATH_SSH_USER_DIR ".ssh"
+ #define _PATH_SSH_USER_DIR ".ussh"

これにより

  • ~/.ssh は一切参照しない
  • ~/.ussh/config を自動で読む
  • ~/.ussh/known_hosts を使用
  • /etc/ssh/ssh_config は無視

となる

$ cd ~/Downloads/openssh-9.7p1
 
export OPENSSL_SRC=$HOME/Downloads/openssl-1.1.1w
export CFLAGS="-I$OPENSSL_SRC/include"
export LDFLAGS="-L$OPENSSL_SRC -lcrypto -lssl"

configure(不要機能を削除)

./configure \
  --with-ssl-dir=$OPENSSL_SRC

ビルド

$ make ssh
$ cp ./ssh ~/bin/ussh

ussh の設定ファイル作成

$ vi ~/.ussh/config

この構成で満たされる要件

  • ~/.ssh を一切使用しない
  • ~/.ussh/config を自動で読む
  • ~/.ussh/known_hosts を使用
  • /etc/ssh/ssh_config を参照しない
  • static link(OpenSSL を make install しない)
  • Apple Silicon 用
  • ssh-dss が利用可能
  • ussh は ~/bin/ussh に配置
  • System の ssh を汚染しない
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2026/0707_20260707_01.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki