移植 OpenSSH

1. 准备工作

OpenSSH 依赖 zlibOpenSSL

源码下载:

本文基于 zlib-1.2.11openssl-1.1.1kopenssh-8.6p1 撰写。

2. 交叉编译

2.1. zlib

2.1.1. 配置 Makefile

1
2
3
CHOST=arm-linux \
./configure \
--prefix=/path/to/install
  • CHOST
    zlib 的 configure 使用此变量自动配置交叉编译工具的前缀,按上述配置,即自动将交叉编译工具名称设为 arm-linux-gcc、arm-linux-ld 等。

2.1.2. 编译与安装

1
make && make install

将安装在 --prefix 所指定的目录。

2.2. OpenSSL

参考之前的文章 移植 OpenSSL

2.3. OpenSSH

2.3.1. 配置 Makefile

1
2
3
4
5
6
7
CC=arm-linux-gcc \
./configure \
--host=arm-linux \
--with-libs \
--with-zlib=/path/to/zlib/install \
--with-ssl-dir=/path/to/openssl/install \
--disable-etc-default-login 
  • CC
    指定交叉编译工具。

  • --host
    目标平台,交叉编译时需指定。

  • --with-zlib
    指定 zlib 的安装位置。

  • --with-ssl-dir
    指定 openssl 的安装位置,如果 openssl 下有共享库,则编译时自动使用 openssl 的共享库(按照上述配置情况下),否则使用静态库。

此处使用默认路径,不设置 –prefix。

2.3.2. 编译

1
make

注意:这里不要安装。

3. 在目标板上使用

3.1. 安装至目标板

3.1.1. 准备工作

  1. 确保目标板上有以下目录,没有则创建

    • /usr/libexec
    • /usr/local/bin
    • /usr/local/etc
  2. 在目标板 /etc/passwd 文件中添加一行

    1
    
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    
  3. 设置 root 用户密码(已设置则忽略)

    1
    
    passwd -a md5 root
    

3.1.2. 拷贝程序至目标板

  1. 将 OpenSSH 交叉编译后的文件(在 openssh-8.6p1 根目录)拷贝至目标板相应目录

    文件名 目标板目录
    sftp-server /usr/libexec
    ssh-keysign /usr/libexec
    sshd /usr/local/bin
    ssh /usr/local/bin
    scp /usr/local/bin
    sftp /usr/local/bin
    ssh-add /usr/local/bin
    ssh-agent /usr/local/bin
    ssh-keygen /usr/local/bin
    ssh-keyscan /usr/local/bin
    sshd_config /usr/local/etc
    ssh_config /usr/local/etc

    此为默认路径,若在配置时设定了相关目录,则按设定修改。

  2. 在目标板建立软链

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    cd /usr/bin
    ln -s ../local/bin/sshd && \
    ln -s ../local/bin/ssh && \
    ln -s ../local/bin/scp && \
    ln -s ../local/bin/sftp && \
    ln -s ../local/bin/ssh-add && \
    ln -s ../local/bin/ssh-agent && \
    ln -s ../local/bin/ssh-keygen && \
    ln -s ../local/bin/ssh-keyscan
    
  3. 修改目标板上的 sshd_config 文件
    原内容:

    1
    2
    3
    4
    5
    
    ...
    #Port 22
    ...
    #PermitRootLogin prohibit-password
    ...
    

    修改为:

    1
    2
    3
    4
    5
    
    ...
    Port 22
    ...
    PermitRootLogin yes
    ...
    

3.2. 建立工作目录

  1. 在目标板上建立工作目录

    1
    2
    
    mkdir /var/run
    mkdir -p /var/empty/sshd
    
  2. 确保目标板 /var/empty/sshd 的权限为 755

    1
    
    chmod -R 755 /var/empty
    
  3. 在目标板上挂载 devpts

    1
    2
    
    mkdir /dev/pts
    mount devpts -t devpts /dev/pts
    

3.3. 生成密钥

1
2
3
cd /usr/local/etc
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
ssh-keygen -t ed25519 -f ssh_host_key -N ""

3.4. 开启 sshd

1
/usr/sbin/sshd
本博客所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于 2023/06/21 14:42 CST
使用 Hugo 构建
主题 StackJimmy 设计