1. 程式人生 > >openssh 在arm linux 嵌入式平臺交叉編譯,100%成功執行

openssh 在arm linux 嵌入式平臺交叉編譯,100%成功執行

本文真實地址:http://blog.csdn.net/code_style/article/details/61928328

2、交叉編譯環境:arm-linux-gnueabi-gcc 4.8

3、由於openssh依賴zlib和openssl,所以編譯openssh之前,先要編譯出zlib庫和openssl庫,最新版本的openssh-7.5P1.tar.gz 必須配合相應的openssl版本(OpenSSL >= 0.9.8f < 1.1.x)才能編譯成功,否則會出現各種巨集找不到的錯誤 。具體編譯openssh以及zlib,openssl不說了,網上一搜一大堆,推薦:http://www.veryarm.com/892.html

4、打包步驟,將以下指令碼放到openssh目錄下執行,可以把所有需要打包的檔案自動歸類到tar_openssh目錄下,如果你拷貝貼上,很可能就會出現指令碼不相容的問題(拷貝指令碼到linux下,用dos2unix(sudo apt-get install dos2unix)工具修改一下檔案,不然指令碼執行錯誤)

#!/bin/sh

mkdir -p ./tar_openssh

#scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan
cp -rf scp ./tar_openssh
cp -rf sftp ./tar_openssh
cp -rf ssh ./tar_openssh
cp -rf ssh-add ./tar_openssh
cp -rf ssh-agent ./tar_openssh
cp -rf ssh-keygen ./tar_openssh
cp -rf ssh-keyscan ./tar_openssh

#moduli ssh_config sshd_config
cp -rf moduli ./tar_openssh
cp -rf ssh_config ./tar_openssh
cp -rf sshd_config ./tar_openssh

#sftp-server  ssh-keysign
cp -rf sftp-server ./tar_openssh
cp -rf ssh-keysign ./tar_openssh

#sshd
cp -rf sshd ./tar_openssh

echo "all file cp to ./tar_openssh dir"

5、把以下指令碼放到tar_openssh目錄,再把tar_openssh目錄拷貝到目標板上,修改untar_pkg.sh許可權為可執行,然後執行該指令碼,它會自動把檔案部署到對應的目錄
#!/bin/sh

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/

chmod 744 smv sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan ssh_config sftp-server ssh-keysign sshd

#smv  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan 拷貝到目標板/usr/local/bin
mv -rf smv /usr/local/bin/
mv -rf sftp /usr/local/bin/
mv -rf ssh /usr/local/bin/
mv -rf ssh-add /usr/local/bin/
mv -rf ssh-agent /usr/local/bin/
mv -rf ssh-keygen /usr/local/bin/
mv -rf ssh-keyscan /usr/local/bin/

#moduli ssh_config sshd_config 拷貝到目標板 /usr/local/etc
chmod 620 moduli
mv -rf moduli /usr/local/etc
chmod 644 ssh_config
mv -rf ssh_config /usr/local/etc
chmod 600 sshd_config
mv -rf sshd_config /usr/local/etc

#sftp-server  ssh-keysign 拷貝到目標板 /usr/local/libexec
mv -rf sftp-server /usr/local/libexec
mv -rf ssh-keysign /usr/local/libexec

#sshd 拷貝到目標板 /usr/local/sbin/
mv -rf sshd /usr/local/sbin/


6、 在主機上(win7使用openssh win32版本,Linux直接openssh)生成公鑰和私鑰,然後把所有金鑰複製到目標板上/usr/local/etc目錄下

7、在win7主機上生成私鑰和公鑰(直接切換到openssh安裝目錄,再執行,不然會提示不是內部或外部命令),Linux上是一樣的命令

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 ""

8、把所有生成的key檔案,包括.pub和無副檔名的,都拷貝到開發板的/usr/local/etc目錄下,按照如下許可權修改
#chmod 600 ssh_host_dsa_key ssh_host_rsa_key ssh_host_ecdsa_key ssh_host_ed25519_key
#chmod 644 ssh_host_dsa_key.pub ssh_host_rsa_key.pub ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub

9、

修改pts掛載點,這一步非常關鍵,不然後面用PuttY工具連線開發板時候會出現Server refused to allocate pty錯誤 注意,在fstab檔案最後增加的那一行,一定要嚴格複製如下的文字,否則格式不對,執行mount /dev/pts的時候,會提示mount: can't find /dev/pts in /etc/fstab
#rm -rf mknod
#mknod -m 666 /dev/ptmx c 5 2
#chmod 666 /dev/ptmx
#mkdir /dev/pts
#mount /dev/pts
在/etc/fstab檔案中增加最後一行
none            /dev/pts        devpts        gid=5,mode=620    0 0

10、最後執行mount /dev/pts如果沒有什麼錯誤,就說明沒問題了

11、執行sshd

常規軟體的執行方式是./程式名,結果./sshd就提示如下錯誤 sshd reexec requires execution with an absolute path 原來是要這樣的,不需要點,直接輸入/usr/local/sbin/sshd,回車,如果key沒有錯誤的話就可以運行了

12、sshd服務執行起來以後,在PC客戶端上直接配置好對應的ssh_config檔案,然後ssh登入到arm linux即可