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

2019-07-12 17:23发布

本文真实地址: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即可