# 移植 OpenSSH 至 Arm64 Linux 開發板

# 下載

1、編譯 openssh 需要額外兩個函式庫:openssl 和 zlib,網址如下:

zlib 官方下載:http://www.zlib.net/

openssl 官方下載:https://www.openssl.org/source/

openssh 官網下載:https://www.openssh.com/portable.html

它們之間沒有版本衝突,都下載最新板的即可。 本文以zlib-1.2.8.tar.gzopenssl-1.0.1h.tar.gzopenssh-6.6p1.tar.gz 這三個版本為例,其他版本過程一樣。

# 部署

因為移植過程涉及到三個包,所以先部署好工作資料夾,有利於移植過程的順利進行。

$ cd                                                  #切換到使用者資料夾
$ mkdir ssh                                           #建立ssh工作資料夾
$ cd ssh                                              #進入ssh資料夾
$ mkdir zlib.install                                  #建立zlib安裝資料夾,移植過程zlib鏡像會安裝到該資料夾
$ mkdir openssl.install                               #建立openssl安裝資料夾,移植過程openssl鏡像會安裝到該資料夾
$ export PATH=$PATH:/usr/local/arm-2010q1/bin/        #設定Corss Compile器路徑到PATH環境變量
$ export CROSS=aarch64-linux-gnu                      #設定Corss Compile目標架構
1
2
3
4
5
6
7

# 複製解壓縮

zlib-1.2.8.tar.gzopenssl-1.0.1h.tar.gzopenssh-6.6p1.tar.gz 三個原始碼複製到 ssh 資料夾下,並解壓縮:

$ tar zxvf zlib-1.2.8.tar.gz
$ tar zxvf openssl-1.0.1h.tar.gz
$ tar zxvf openssh-6.6p1.tar.gz
1
2
3

# 編譯 zlib

首先編譯 zlib 成鏡像,供最後編譯 openssh 用。

$ cd zlib-1.2.8
$ prefix=$HOME/ssh/zlib.install CC=${CROSS}-gcc ./configure
$ vi Makefile
$ make
$ make install
1
2
3
4
5

這裡第二步設定的時候,prefix 前面沒有--,CC 後面是交叉編譯器,./configure 要放在最後。完成後,會在指定資料夾 ~/ssh/zlib.install 下生成鏡像文件。

# 編譯 openssl

編譯 openssl 成鏡像,也是供最後編譯 openssh 用。

$ cd ../openssl- 1.0 . 1 h
$ ./Configure linux-aarch64 --cross-compile-prefix=${CROSS}- --prefix=$HOME/openssl.install shared
$ make
$ make install
1
2
3
4

其中 ./Configure 第一個字母是大寫的,交叉編譯使用 os/compiler 來指定。

# 編譯 openssh

編譯 openssh 會引用上面編譯的 zlib 和 openssl 的安裝資料夾,如下。

$ cd ../openssh- 6.6 p1
$ ./configure --host=${CROSS} --with-libs --with-zlib=$HOME/zlib.install --with-ssl-dir=$HOME/openssl.install --disable-etc-default-login
$ make
1
2
3

注意:openssh 不需要 make install

# 開發板準備

確保開發板上有以下資料夾,如果沒有可以自己建立:

/usr/local/bin
/usr/local/etc
/usr/libexec
/var/run
/var/empty
1
2
3
4
5

# 安裝 zlib

Host 端 ~/ssh/zlib.install/ 資料夾下文件複製到開發板系統中

$ cp -R ~/ssh/zlib.install/* ${DEV_ROOT}/usr/
1

# 安裝 OpenSSL

Host 端 ~/ssh/openssl.install/ 資料夾下文件複製到開發板系統中

$ cp -R ~/ssh/openssl.install/* ${DEV_ROOT}/usr/
1

# 安裝 OpenSSH

Host 端 ~/ssh/openssh-6.6p1/ 資料夾下文件複製到開發板系統中

$ cp scp sftp ssh sshd ssh-add ssh-agent ssh-keygen ssh-keyscan ${DEV_ROOT}/usr/local/bin
$ cp moduli ssh_config sshd_config ${DEV_ROOT}/usr/local/etc
$ cp sftp-server ssh-keysign ${DEV_ROOT}/usr/libexec
1
2
3

# 生成 Key 檔

在開發板 /usr/local/etc/ 資料夾下生成 key 檔:

$ cd /usr/local/etc/
$ ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
$ ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
$ ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
$ ssh-keygen -t dsa - f ssh_host_ed25519_key -N ""
1
2
3
4
5

修改 ssh_host_ed25519_key 權限為 600:

$ chmod 600 ssh_host_ed25519_key
1

# 開發板使用者設定

打開 /etc/passwd 文件,在最後添加下面這一行:

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
1

如果開發板的 root 使用者還沒有密碼,鍵入以下命令然輸入兩次密碼來修改,否其他設備無法連:

$ passwd root
1

# 測試

最後執行 sshd 看看是否啟動

$ /usr/local/bin/sshd
$ ssh root@127.0.0.1
1
2
# 參考:https://www.veryarm.com/892.html