macOS 標準 ssh の環境を汚染せず、古いネットワーク機器への接続に必要な ssh-dss を利用可能な独立バイナリ ussh を構築する。
今回構築するusshは以下を満たすものとする
結果、OpenSSL 1.1.1 系統しか選択肢がない。
ただし、OpenSSL 1.1.1は2023年9月11日にEoLを迎えているので、今後のUpdateはない。したがって、ssh-dssを利用するdeviceを早期に交換するか、telnetに頼るしかないことに注意。
$ mkdir -p ~/bin $ mkdir -p ~/.ussh
$ 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
生成物:
$ 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
OpenSSH は設定ファイルの検索パスをソースコードにハードコードしているため、以下のファイルを修正する。
$ 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 \ --with-ssl-dir=$OPENSSL_SRC
$ make ssh $ cp ./ssh ~/bin/ussh
$ vi ~/.ussh/config