Arm-Linux 移植 ssh + zlib、ssl

背景:

本身擁有一塊開發板,可是苦於上面沒有ssh,比較不方便。正好趁這個機會,移植ssh。咱們使用的ssh是openssh。html

主機準備:

爲了方便管理,建立有關的目錄linux

mkdir ssh
cd ssh
mkdir  compressed  install  source

下載並解壓有關的源碼:app

cd compressed
wget -c https://www.zlib.net/zlib-1.2.11.tar.gz wget -c https://www.openssl.org/source/openssl-0.9.8e.tar.gz wget -c http://mirrors.mit.edu/pub/OpenBSD/OpenSSH/portable/openssh-4.6p1.tar.gz

#解壓下載的包
tar -xf openssh-4.6p1.tar.gz -C ../source tar -xf openssl-0.9.8e.tar.gz -C ../source tar -xf zlib-1.2.11.tar.gz -C ../source


編譯:

編譯 zlibssh

cd ../source/zlib-1.2.11

 使用如下腳本工具

OUTPUT_PATH=/home/schips/arm/mtd-utils/install
ARM_GCC=arm-none-linux-gnueabi-gcc

CC=${ARM_GCC} ./configure --prefix=${OUTPUT_PATH}/zlib-1.2.11 && make && make install

 


 編譯opensslui

cd ../openssl-0.9.8e/
# 紅色部分同上,根據本身的需求進行修改
./Configure --prefix=/home/xx/arm/ssh/install/openssl-0.9.8e  os/compiler:arm-none-linux-gnueabi-gcc
make && make install

通常到了這裏會出現下列問題,處理後從新 make && make install 便可:spa

(筆者建議使用 紅色加粗的命令.net

編譯和安裝openssl時出錯,POD document had syntax errors
錯誤信息:
  installing man1/smime.1
  smime.pod around line 272: Expected text after =item, not a number
  smime.pod around line 276: Expected text after =item, not a number
  smime.pod around line 280: Expected text after =item, not a number
  smime.pod around line 285: Expected text after =item, not a number
  smime.pod around line 289: Expected text after =item, not a number
  POD document had syntax errors at /usr/bin/pod2man line 71.
  make: *** [install_docs] 錯誤 255
  緣由分析:這是因爲OpenSSL 1.0.1e 與 perl5.18 不兼容。
  解決方法:
  1. 安裝perl 5.16 能夠兼容,安排低版本perl 5.16能夠解決問題。
  2. 讓 pod2man 沒法被訪問:
      sudo rm /usr/bin/pod2man
            或
      sudo mv /usr/bin/pod2man /usr/bin/pod2man_bak


編譯opensshrest

紅色部分依舊根據實際狀況進行修改code

cd ../openssh-4.6p1/

./configure --host=arm-none-linux-gnueabi  \ 
--with-libs --with-zlib=/home/xx/arm/ssh/install/zlib-1.2.11 \
--with-ssl-dir=/home/xx/arm/ssh/install/openssl-0.9.8e \
--disable-etc-default-login \
CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar

make
    #注意:openssh不須要make install


若是出現如下某個報錯,請注意zlib的install路徑 和 OpenSSL的install路徑 是否正確
  configure配置openssh的時候出錯:configure: error: *** zlib missing - please install first or check config.log ***
  configure: error: *** Can't find recent OpenSSL libcrypto (see config.log for details)
 
 

開發板準備:

新建如下目錄

mkdir -p /usr/local/bin/
mkdir -p /usr/local/sbin/
mkdir -p /usr/local/etc/
mkdir -p /usr/local/libexec/
mkdir -p /var/run/
mkdir -p /var/empty/

拷貝:
從PC機上將如下文件拷貝到目標板Linux系統中


PC機 ssh/source/openssh-4.6p1/ 目錄下的

  • scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan  拷貝到目標板/usr/local/bin
  • moduli ssh_config sshd_config拷貝到目標板 /usr/local/etc
  • sftp-server  ssh-keysign 拷貝到目標板 /usr/local/libexec
  • sshd 拷貝到目標板 /usr/local/sbin/



生成Key文件
在PC機 ssh/source/openssh-4.6p1/ 目錄下運行:

ssh-keygen -t rsa -f ssh_host_key -N ""
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_host_*_key這4個文件copy到目標板的 /usr/local/etc/目錄下

 

修改目標板passwd文件

在/etc/passwd 中添加下面這一行 「 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

cp /etc/passwd  /etc/passwd_bak
echo "sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin" >> /etc/passwd

 


此後,只須要運行一次 /usr/local/sbin/sshd 此後便可使用遠程登陸

若是開發板的 root 用戶尚未密碼,鍵入如下命令然輸入兩次密碼來修改,不然其餘設備沒法鏈接:

passwd root


若是鏈接不上,請直接運行 /usr/local/sbin/sshd 查看是什麼緣由

  • 有提示 動態連接庫 找不到的(工具鏈的動態連接庫)
  • 有提示 ssh_host 文件找不到的 生成便可

 

開發板設置開機自啓動ssh:

/etc/init.d目錄下新建Sxxsshd.sh文件 (xx 指的是具體的數字,可任意,通常越晚後越好)
#! /bin/sh
sshd=/usr/local/sbin/sshd
test -x "$sshd" || exit 0
case "$1" in
  start)
    echo -n "Starting sshd daemon"
    start-stop-daemon --start --quiet --exec $sshd  -b
    echo "."
    ;;
  stop)
    echo -n "Stopping sshd"
    start-stop-daemon --stop --quiet --exec $sshd
    echo "."
    ;;
  restart)
    echo -n "Stopping sshd"
    start-stop-daemon --stop --quiet --exec $sshd
    echo "."
    echo -n "Waiting for sshd to die off"
    for i in 1 2 3 ;
    do
        sleep 1
        echo -n "."
    done
    echo ""
    echo -n "Starting sshd daemon"
    start-stop-daemon --start --quiet --exec $sshd -b
    echo "."
    ;;
  *)
    echo "Usage: /etc/init.d/sshd {start|stop|restart}"
    exit 1
esac
exit 0

 

 

ref :
  https://blog.csdn.net/acanoe/article/details/7853017
  https://www.veryarm.com/892.html
  https://blog.csdn.net/evenness/article/details/16881975
  https://blog.csdn.net/v6543210/article/details/83420034
相關文章
相關標籤/搜索