openssh 在arm linux 嵌入式平台交叉编译,100%成功运行

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


1、openssh版本,最新版本openssh-7.5P1.tar.gz,下载地址:https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz


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目录下
win7版本最新的openssh下载路径:https://github.com/PowerShell/Win32-OpenSSH/releases

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即可




你可能感兴趣的:(嵌入式软件)