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
OpenSSL build static link library(make install しない)
$ ./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 は無視
となる
OpenSSH を static link でビルド
$ 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 を汚染しない
tweet/2026/0707_20260707_01.txt · 最終更新: by 127.0.0.1
