1. 程式人生 > >《Linux作業系統-系統移植》第7章 工具移植 -第2節 SSH服務移植

《Linux作業系統-系統移植》第7章 工具移植 -第2節 SSH服務移植

開發環境:
主機:Ubuntu12.04
開發板:Exynos4412

2.1編譯相關檔案

SSH協議族可以用來進行遠端控制, 附加的SFTP協議可輕鬆實現在計算機之間傳送檔案。而實現此功能的傳統方式,如telnet(終端模擬協議)、 rcp ftp、 rlogin、rsh都是極為不安全的,因為它們使用明文傳送密碼。

OpenSSH常常被誤認以為與OpenSSL有關聯,但實際上這兩個計劃的有不同的目的,不同的發展團隊,名稱相近只是因為兩者有同樣的軟體發展目標──提供開放原始碼的加密通訊軟體。

1.下載
首先下載幾個原始碼包,移植openssh需要三個包:openssh、openssl 和 zlib,地址如下:

zlib官方下載
openssl官方下載
openssh官網下載

因為它們之間沒有版本所謂的版本衝突,所以都下載最新板的即可。本文以zlib-1.2.11.tar.gz、openssl-1.0.2o.tar.gz、openssh-7.9p1.tar.gz這三個版本為例,其他版本過程一樣。

2.部署
建立ssh目錄
mkdir ./ssh
cd ./ssh
3.交叉編譯
1、編譯zlib
進入zlib目錄
$cd ./zlib-1.2.11/

建立編譯資料夾;
$mkdir install

修改配置檔案:
$./configure ­­prefix=`pwd`/install

【注】­­prefix後面為軟體安裝目錄
修改Makefile
CC=gcc 改為:
CROSS= arm-none-linux-gnueabi-
CC=$(CROSS)gcc
LDSHARED= gcc 改為:LDSHARED=$(CROSS)gcc
CPP= gcc - E 改為:CPP=$(CROSS)gcc - E
AR= ar 改為:AR=$(CROSS)ar
RANLIB=ranlib改為RANLIB=$(CROSS)ranlib

開始編譯:
$make
$make install

2、編譯openssl
進入openssl 目錄,
$cd ./openssl-1.0.2o/

建立編譯資料夾;
$mkdir install

修改配置檔案:
$./config --prefix=`pwd`/install os/compiler:arm-none-linux-gnueabi-gcc

編譯並安裝:
$make
$make install

3、編譯openssh
進入openssh 目錄,
$cd ./openssh-7.9p1/

修改配置檔案:
$./configure --host=arm-none-linux-gnueabi --with-libs --with-zlib=/home/farsight/tools/ssh/zlib-1.2.11/install --with-ssl-dir=/home/farsight/tools/ssh/openssl-1.0.2o/install --disable-etc-default-login CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar

【注】配置說明

  • –prefix= install architecture-independent files in PREFIX[ /usr/local ] (將體系無關檔案安裝到目錄PREFIX裡,預設是/usr/local),這裡的有:
    PREFIX/etc,PREFIX/com,PREFIX/var,PREFIX/include,PREFIX/share
  • –exec-prefix=install architecture-dependent files in EPREFIX[PREFIX](將體系相關檔案安裝到目錄EPREFIX裡)
    這裡的有:
    EPREFIX/bin, EPREFIX/sbin, EPREFIX/libexec, EPREFIX/lib,
     –with-zlib=剛才編譯出來的zlib安裝路徑
     –with-ssl-dir=剛才編譯出來openssl安裝路徑
     –host=交叉編譯出來的程式執行的平臺
  • –with-privsep-path=“/var/empty”的目錄 (Path for privilege separation chroot)預設使用的是privsep模式,可檢視READ.privsep
  • –sysconfdir= 配置檔案安裝路徑,此目錄會影響sshd和ssh的配置尋找,如果沒有使用此選項,在編譯安裝後,當你直接執行sshd時,它會直接去PREFIX/etc下找sshd_config,找不到就報錯,只能用引數-f指明sshd_config路徑。

配置完後在生成的Makefile中做些修改:

DESTDIR=/home/farsight/exynos4412/system
#我的根檔案系統目錄,此用來設定安裝根目錄,真實的安裝目錄為DESTDIR/PREFIX/..或 DESTDIR/EPREFIX/.. 
STRIP_OPT=-s --strip-program=arm-none-linux-gnueabi-strip

編譯前先確保ARM檔案系統下有無/usr/local目錄,沒有就需要建立。
接下來就是,編譯安裝:
$make & make install-nokeys

DESTDIR修改後就可以直接用make install-nokeys而不用手動去拷貝檔案了,,成功安裝後多出的檔案如下:

[email protected]:~/exynos4412/system/usr/local$ tree
.
├── bin
│   ├── scp
│   ├── sftp
│   ├── ssh
│   ├── ssh-add
│   ├── ssh-agent
│   ├── ssh-keygen
│   └── ssh-keyscan
├── etc
│   ├── moduli
│   ├── ssh_config
│   └── sshd_config
├── libexec
│   ├── sftp-server
│   ├── ssh-keysign
│   └── ssh-pkcs11-helper
├── sbin
│   └── sshd
└── share
    └── man
        ├── man1
        │   ├── scp.1
        │   ├── sftp.1
        │   ├── ssh.1
        │   ├── ssh-add.1
        │   ├── ssh-agent.1
        │   ├── ssh-keygen.1
        │   └── ssh-keyscan.1
        ├── man5
        │   ├── moduli.5
        │   ├── ssh_config.5
        │   └── sshd_config.5
        └── man8
            ├── sftp-server.8
            ├── sshd.8
            ├── ssh-keysign.8
            └── ssh-pkcs11-helper.8

9 directories, 28 files

【注意】如果不執行make install-nokeys這一步,就需要手動移動上述檔案,其中share和etc/moduli這兩個不必需要。

檢查ARM檔案系統下是否有var/empty,沒有就建立。

4、生成金鑰
在system/usr/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 “”
【注】也可在開發板中使用ssh-keygen生成金鑰。

將zlib複製到檔案系統的lib庫下面。
$cp so ~/exynos4412/system_1.29.3/lib/ -d

2.2配置與啟動服務

將系統移植後,在etc/sshd_config中指定私鑰的位置,如我使用的是ecdsa型別,修改sshd_config如下。

HostKey /usr/local/etc/ssh_host_ecdsa_key

同時修改使用密碼登入的功能配置如下:

PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords yes

【注】如果想要在全域性目錄下使用scp、ssh等需要將/usr/local/bin下的移植到/usr/bin目錄下。不然在執行SCP等需要輸入絕對路徑。
現在可以啟動sshd了,使用全路徑,在開發板中開啟服務:
$/usr/local/sbin/sshd
$ps |grep sshd
在這裡插入圖片描述
上面說明正常啟動伺服器了,每次更改配置後都要重啟一次才生效。可以在PC端使用ssh命令遠端登入試試。

【注】要想每次開機都會啟動此服務,需要將/usr/local/sbin/sshd放到/etc/init.d/rcS中。

【注】移植問題解決
問題1:
在這裡插入圖片描述
解決:
$mknod -m 444 /dev/random c 1 8
$mknod -m 444 /dev/urandom c 1 9

問題2:

在這裡插入圖片描述
原因及解決方式:
sshd賬戶不存在,需要增加該賬戶。sshd預設是使能Privilege separation,可以閱讀README.privsep文件。
解決:
$adduser -h /var/empty -g ‘sshd privsep’ -s /bin/false sshd sshd

問題3:
在這裡插入圖片描述
解決:直接更改使用者組就可以了。
$ chown root:root /var/empty

相關推薦

Linux作業系統-系統移植7 工具移植 -2 SSH服務移植

開發環境: 主機:Ubuntu12.04 開發板:Exynos4412 2.1編譯相關檔案 SSH協議族可以用來進行遠端控制, 附加的SFTP協議可輕鬆實現在計算機之間傳送檔案。而實現此功能的傳統方式,如telnet(終端模擬協議)、 rcp ftp、 rlog

Linux作業系統-系統移植7 工具移植 -3 Mini-xml移植

開發環境: 主機環境:Ubuntu 12.04 目標機環境:Exynos4412開發板(Linux 3.0.5) 一個輕量級的xml庫,可完成讀寫。適合系統資源受限的嵌入式裝置。 原始碼下載:https

Linux作業系統-系統移植8 USB-4G/LTE移植 -4 USB-4G移植(移遠EC20開發-Gobi撥號)

開發環境 主機:ubuntu12.04 開發板核心版本:linux-2.6.35 【注】EC20支援PPP撥號,Gobi撥號和QMI撥號,筆者使用的是Gobi撥號,關於另外兩種撥號請參考官方文件,後文的附件連結中已經給出了參考文件。 3.1 USB Serial

Linux作業系統-系統移植8 USB-4G/LTE移植 -2 USB-4G移植(中興ME3760移植

ME3760 是一款Mini PCI-E介面的LTE 模組,支援LTE TDD band38(2.6GHz),band39(1.9GHz),band40(2.3GHz); LTE FDD band7(2.6GHz),向下相容TD-SCDMA A頻段(2.1GHz

Linux作業系統-系統移植8 USB-4G/LTE移植 -1 USB-4G移植C(華為E392u­924G移植

1.3 PPP編譯 1.獲取原始碼 PPP官網下載:https://download.samba.org/pub/ppp/ 下載解壓ppp-2.4.7.tar.gz原始碼,存放在/home/farsig

Linux作業系統-系統移植8 USB-4G/LTE移植 -3 USB-4G移植(移遠AG35開發-GPS解析及程式設計)

檢視參考手冊,移遠帶有GPS的晶片的USB Serial如下。 2.1應用簡介 1、若不使用 AT+QGPSCFG 指令對AG35進行配置,則會以預設引數開啟GPS引數,NMEA埠開始上報,"gpsnmeatype"預設值為31,上報間隔為1s,每次上報所有種

Linux作業系統-系統移植8 USB-4G/LTE移植 -1 USB-4G移植 F(華為E392u­924G移植

1.6啟動撥號指令碼 $mkdir shell_script $cd /shell_script $ vi usb.sh 輸入以下內容,然後儲存退出。 usb_modeswitch -W -c /etc

推薦系統實踐(項亮)— 7 推薦系統例項

7.1 外圍架構 7.2 推薦系統架構 基於特徵的推薦系統架構 使用者喜歡的物品、使用者相似的使用者也可以抽象成特徵; 基於特徵的推薦系統核心任務就被拆解成兩部分,一個是如何為給定使用者生成特徵,另一個是如何根據特徵找到物品; 使用者特徵種類

【RTX作業系統教程】7 任務管理

原文來源:http://forum.armfly.com/forum.php?mod=viewthread&tid=16713&highlight=RTX%B2%D9%D7%F7%CF%B5%CD%B3%BD%CC%B3%CC 第7章     &nb

易學筆記-Linux命令-7:重定向

第7章:重定向 重定向 概念:Linux中任何的一個東西都是檔案,輸入和輸出的基礎也都是檔案。而重定向指的是從輸入和輸出的標準檔案切換到一般檔案 標準化的輸入和輸出 標準的輸入:stdin:通常指的是鍵盤 標準的輸出:stdout:通

[C陷阱和缺陷] 7移植性缺陷

  C語言在許多不同的系統平臺上都有實現。的確,使用C語言編寫程式的一個首要原因就是,C程式能夠方便地在不同的程式設計環境中移植。   不同的系統有不同的需求,因此我們應該能夠預料到,機器不同則其上的C語言實現也由細微差別。今天,一個C程式設計師如果希望自己寫的程式在另一個程式設計環境也能

7 資料庫系統

1.併發控制 封鎖技術:X封鎖(排他型)、S封鎖(共享型) 三大問題: 1.丟失更新:讀同一資料並修改 2.讀髒資料:第二次讀到與資料庫不一致 3.不可重複讀:事務2干擾事務1的獨立性 2.三級模式、二

《推薦系統實踐》__7__推薦系統例項

目錄 7.1 外圍架構 7.2 推薦系統架構 7.3 推薦引擎架構 7.3.1 生成使用者特徵向量 7.3.2 特徵-物品相關推薦 7.3.3 過濾模組 7.3.4 排名模組 7.1 外圍架構 資料的收集與儲存 實時資料:資料庫mysql或快取

【資料庫系統概念】7 資料庫設計和E-R模型 知識總結

《資料庫系統概念》第7章知識點總結 資料庫設計和E-R模型 本章我們將學習將資料庫表示為一個關係資料庫設計和一個與之關聯的約束集合 實體:指示所有可明確識別的個體。各種各樣的實體以多種方式互相關聯,而所有這些方式都需要在資料庫設計中反映出來 設計一個數據庫模式的時候,

《深入理解計算機系統》——7(連結)

連結 連結:將各種程式碼和資料部分收集起來並組合成為一個單一檔案的過程。(這個檔案可被載入或拷貝到儲存器並執行) 連結可以執行於編譯,載入或執行時。 靜態連結: 兩個主要任務: 1 符號解析:將目標檔案中的每個全域性符號都繫結到一個唯一的定義 2 重

linux核心設計與實現 —— 中斷和中斷處理(78

中斷和中斷處理 中斷的目的:讓處理器最快地響應外部硬體的請求。 中斷本質上是一種特殊的電訊號,由硬體裝置發向處理器,處理器反映到作業系統中,最後由作業系統處理這個中斷電訊號。 不同的裝置對應的中斷不同。每個中斷都通過一個唯一的數字標記,這個標記通常被稱為中

軟體開發工具7:Eclipse入門)

一、Eclipse簡介 Eclipse [iˈklips],是一個開放源代 碼的、基於Java的可擴充套件整合應 用程式開發環境。 Eclipse最初主要用來進行Java語 言開發,但並非只有這個用途。 Eclipse的體系結構   執行時核心 :平臺執行庫是核心,它在啟動時檢查已安裝了哪些外

71講一維數組

min display %d mar image 技術分享 分享 lock images main() { int a[10],i,max,min; float ave=0; for(i=0;i<N;i++) sc

72講字符數組

width ++ mar block strcmp splay log for img main() { char ch[12]={‘G‘,‘o‘,‘o‘,‘d‘,‘ ‘,‘m‘,‘o‘,‘r‘,‘n‘,‘i‘,‘n‘,‘g‘}; int i

深入理解計算機系統 大略和大略

$0 一個 編譯 存儲器 系統 32位 做了 ++i 擴展 這2章總結的很少,主要是覺得沒那麽重要。 1.2個操作數的指令,第二個操作數通常是目的操作數:movb a b,move a to b,而add a b,b+=a,指令分為指令類,如mov類:movb,movw,m