移植SSH到ARM Linux開發(fā)板成功
登錄成功后如下圖:

putty登錄

linux主機登錄
問題總結1.運行sshd時出現(xiàn)
sshd: /lib/libc.so.6: version `GLIBC_2.7 not found (required by sshd)
問題分析:說明你編譯等時候指定等glibc和目標板所使用的不一致。
解決辦法:配置openssh,即./configure時,使用對用等--host參數(shù),如--host=arm-linux/arm-none-linux-gnueabi。
2.make openssl的時候,指定的prefix目錄已經(jīng)存在,無法創(chuàng)建。
問題分析:這是因為在prefix目錄的時候,使用了相對路徑,如../../install。
解決辦法:openssl需要用指定絕對路徑來安裝,prefix參數(shù)應該如:--prefix=/work/ssh/install/openssl-1.0.0
3.使用arm-2007q3-51-arm-none-linux-gnueabi.bin的make編譯ssh和gdbserver時出錯:
/root/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
make: *** [example] 錯誤 1
問題解析:
cannot find -lgcc_s,即沒有發(fā)現(xiàn)-libgcc_s.so。
解決辦法:
可能一解決:查找/root/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/lib目錄,如果有l(wèi)ibgcc_s.so.1,做一個鏈接:ln -s libgcc_s.so.1 libgcc_s.so,重新make,此問題可以解決。如果再出現(xiàn)以下問題:
解決辦法:
可能一解決:查找/root/CodeSourcery/Sourcery_G++_Lite/arm-none-linux-gnueabi/libc/lib目錄,如果有l(wèi)ibgcc_s.so.1,做一個鏈接:ln -s libgcc_s.so.1 libgcc_s.so,重新make,此問題可以解決。如果再出現(xiàn)以下問題:
同理,其他的問題,也在/arm-none-linux-gnueabi/libc/lib目錄下,
問題:cannot find /lib/libc.so.6 inside,解決:ln -s libc-2.5.so libc.so.6
問題:cannot find /lib/ld-linux.so.3 inside,解決:ln -s ld-2.5.so ld-linux.so.3
4.用nfs從主機復制到目標板時出現(xiàn):
cp: omitting directory /etc/boa
等錯誤。
問題分析:權限不夠,或者目標板中等/usr/local/etc已經(jīng)有文件。
解決辦法:在cp命令后加-r參數(shù),如:cp -r /etc/* /usr/local/etc/
5.運行sshd時出現(xiàn):
Could not load host key: /usr/local/etc/ssh_host_dsa_key
Could not load host key: /usr/local/etc/ssh_host_ecdsa_key
問題解析:在/usr/local/etc目錄中沒有相應等key。
解決辦法:按照操作步驟,運行:
生成ssh_host_das_key 和ssh_host_ecdas_key后復制到目標板/usr/local/etc/目錄下。
6.從nfs復制key文件到usr/local/etc時出現(xiàn):
cp: cant open ssh_host_dsa_key: Permission denied
問題分析:目標板復制權限不夠。
解決辦法:在主機中修改他們等權限為777,命令:chmod 777 *
7.Privilege separation user sshd does not exist
//需要在開發(fā)板的系統(tǒng)里adduser shhd
//或者在/etc/passwd 中添加下面這一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
8.Permissions 0755 for /usr/local/etc/ssh_host_dsa_key are too open.
//則把目標板/usr/local/etc/下的ssh_host_*幾個文件的權限改為700。如果出現(xiàn)權限不夠問題,用su - root進入root用戶再改。
命令:#chmod 700 ssh_host_*
9.Permission denied (publickey,password,keyboard-interactive).
//打開開發(fā)板/usr/local/sshd_config,將PermitRootLogin yes前的注釋“#”號去掉。
10.configure配置openssh的時候出錯:
configure: error: *** zlib missing - please install first or check config.log ***
問題分析:沒有找到zlib。
問題解決:重新交叉編譯zlib,再configure即可。
11.以下兩個函數(shù)沒找到:
/home/arm/ssh-omap/source/openssh-5.8p2/ssh-keygen.c:1410: undefined reference to `pkcs11_init
/home/arm/ssh-omap/source/openssh-5.8p2/ssh-keygen.c:1493: undefined reference to `pkcs11_terminate
問題解決:
打開ssh-keygen.c:vi ssh-keygen.c
屏蔽這1410和1493這兩行函數(shù)。
12.開啟sshd后,沒有找到sftp-server服務。如DS-5軟件在連接時就出現(xiàn)以下錯誤,雖然還可以用終端,不過不能傳輸文件,還是很不爽的:
Failed to connect SFTP subsystem: Remote host may not have sftp-server installed : java.io.IOException: inputstream is closed
問題分析:明顯的,這是沒有找到sftp子服務。
問題解決:打開/usr/local/etc/sshd_config,找到這么一行:
Subsystem sftp /usr/libexec/sftp-server
看出問題了吧?配置文件中指明的sftp子服務并不是我們放的目錄,所以修改為:
Subsystem sftp /usr/local/libexec/sftp-server
然后kill掉sshd,再啟動就可以用sftp-server了。
評論