目次

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

目的

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

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

OpenSSL 1.1.1wを利用する理由

結果、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

生成物:

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"

これにより

となる

$ 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

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