openssh移植

来源:互联网 发布:网店大师软件 编辑:程序博客网 时间:2024/05/22 09:01

实验环境:Ubuntu14.04LTS+arm-none-linux-gnueabi(友善之臂的交叉编译工具4.4.3版)

软件版本:openssh-7.0p1+openssl-1.0.2l+zlib-1.2.11

首先去官网下载这几个源码包。  openssh官网  openssl官网    zlib官网 

源码包下载完了,先新建个目录,然后把源码包都放到新建的目录上。终端输入:

sudo mkdir openssh  && cd opensshmv  源码包   openssh目录tar -xf   源码包
3个源码包分别移动,然后看看ssh目录下是否都有源码包了,然后开始解压,如果终端提示没有权限,如果终端提示没有权限,就命令前面加sudo。 
fh@pc:~/linux/ssh$ cd ../openssh/fh@pc:~/linux/openssh$ lsopenssh-7.0p1.tar.gz  openssl-1.0.2l.tar.gz  zlib-1.2.11.tar.gzfh@pc:~/linux/openssh$ tar -xf zlib-1.2.11.tar.gz fh@pc:~/linux/openssh$ tar -xf openssh-7.0p1.tar.gz fh@pc:~/linux/openssh$ tar -xf openssl-1.0.2l.tar.gzfh@pc:~/linux/openssh$ lsopenssh-7.0p1         openssl-1.0.2l         zlib-1.2.11openssh-7.0p1.tar.gz  openssl-1.0.2l.tar.gz  zlib-1.2.11.tar.gzfh@pc:~/linux/openssh$                                     

解压完后,第一步:开始交叉编译zlib。这里配置安装目录是zlib同级目录内的install目录

fh@pc:~/linux/openssh$ cd zlib-1.2.11/fh@pc:~/linux/openssh/zlib-1.2.11$ ./configure --prefix=/home/fh/linux/openssh/install/zlib-1.2.11 Checking for gcc...Checking for shared library support...Building shared library libz.so.1.2.11 with gcc.Checking for size_t... Yes.Checking for off64_t... Yes.Checking for fseeko... Yes.Checking for strerror... Yes.Checking for unistd.h... Yes.Checking for stdarg.h... Yes.Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().Checking for vsnprintf() in stdio.h... Yes.Checking for return value of vsnprintf()... Yes.Checking for attribute(visibility) support... Yes.fh@pc:~/linux/openssh/zlib-1.2.11$ vim Makefilefh@pc:~/linux/openssh/zlib-1.2.11$ make && make install

然后修改Makefile文件,将里面的CC,AR,CPP,LDSHARE=后面的编译器名称改为自己系统安装的交叉编译器名称。我的系统里是arm-none-linux-gnueabi-gcc的交叉编译器,其中AR后面的跟ar而不是gcc。改好保存退出。

fh@pc:~/linux/openssh/zlib-1.2.11$ ls ../install/zlib-1.2.11/include  lib  share
fh@pc:~/linux/openssh/zlib-1.2.11$ ls ../install/zlib-1.2.11/include  lib  share
然后make && make install。如果没有报错的话,就可以在install目录内可以看到zlib-1.2.11目录下有lib,include,share三个文件夹,这说明安装成功。
fh@pc:~/linux/openssh/zlib-1.2.11$ ls ../install/zlib-1.2.11/include  lib  share
第二步:交叉编译openssl,步骤与zlib类似。进入到解压后的openssl目录,终端输入:
fh@pc:~/linux/openssh/zlib-1.2.11$ cd ../openssl-1.0.2l/fh@pc:~/linux/openssh/openssl-1.0.2l$ ./Configure --prefix=/home/fh/linux/openssh/install/openssl-1.0.2l os/compiler:arm-none-linux-gnueabi-gccmake[1]:正在离开目录 `/home/fh/linux/openssh/openssl-1.0.2l/test'Configured for os/compiler.fh@pc:~/linux/openssh/openssl-1.0.2l$ make && make install......................make[1]:正在离开目录 `/home/fh/linux/openssh/openssl-1.0.2l/tools'installing libcrypto.ainstalling libssl.acp libcrypto.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfigchmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/libcrypto.pccp libssl.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfigchmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/libssl.pccp openssl.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfigchmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/openssl.pcfh@pc:~/linux/openssh/openssl-1.0.2l$
然后make && make  install 。这个configure的c是大写哦,别看错了。如果安装的时候会报错。因为配置的时候安装目录没有写绝对地址,所以--prefix=安装目录的绝对地址。如果不知道该目录的绝对地址,可以先进入到该目录,然后用pwd显示该目录的所在位置。

第三步:交叉编译openssh。进入openssh目录,这个配置的时候参数比较多,需要用到前两步的openssl和zlib。因为这个不用安装,所以可以用相对目录。这时候可以看到配置输出的信息,找一下有没有found arm-none-linux-gnueabi-gcc  yes之类的字样,防止配置的时候并没有找到交叉编译器,没有错误,就可以make了。make 也没错误,基本上就成功了。因为openssh实在开发板上运行,也就不需要make install的步骤了。

./configure --host=arm-none-linux-gnueabi --with-libs --with-zlib=../install/zlib-1.2.11 --with-ssl-dir=../install/openssl-1.0.2l --disable-etc-default-login CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar........................Host: arm-none-linux-gnueabi          Compiler: arm-none-linux-gnueabi-gcc    Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wno-pointer-sign -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-all -std=gnu99 -fPIE Preprocessor flags: -I/home/fh/linux/openssh/openssh-7.0p1/../install/openssl-1.0.2l/include -I../install/zlib-1.2.11/include       Linker flags: -L/home/fh/linux/openssh/openssh-7.0p1/../install/openssl-1.0.2l/lib -L../install/zlib-1.2.11/lib  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-all -pie         Libraries: -lcrypto -lrt -ldl -lutil -lz -lnsl  -lcrypt -lresolvfh@pc:~/linux/openssh/openssh-7.0p1$make..................../install/openssl-1.0.2l/lib -L../install/zlib-1.2.11/lib  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-all -pie -lssh -lopenbsd-compat -lcrypto -lrt -ldl -lutil -lz -lnsl  -lcrypt -lresolv /usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: creating a DT_TEXTREL in object.fh@pc:~/linux/openssh/openssh-7.0p1$
没有报错,这就成功了。

第四步:在openssh目录下拷贝必要文件到目标板上。

scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin目录下

moduli ssh_config sshd_config拷贝到目标板/usr/local/etc目录下

sftp-server ssh-keysign拷贝到目标板/usr/local/libexec目录下

sshd拷贝到目标板/usr/local/sbin目录下,如果目标板没有这些目录,就要新建。

第五步:生成秘钥文件。

在目标板上分别执行:/usr/local/bin/ssh-keygen -t rsa -f ssh_host_rsa_key -N ""

                                   /usr/local/bin/ssh-keygen -t dsa -f ssh_host-dsa_key -N ""

                                  /usr/local/bin/ssh-keygen -A   这个可以生成所有的秘钥。

第六步:修改目标板的passwd文件,最下面添加一行:sshd:*:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

第七步:修改目标板的密码;passwd root然后会提示输入新的密码,输两次就更改成功了。已经有密码的可以不用更改密码。

第八步:修改sshd_config文件中,有一行 #PermitRootLogin prohibit-password更改为#PermitRootLogin yes

有一行Subsystem    sftp    /usr/libexec/sftp-server 更改为Subsystem    sftp    /usr/local/libexec/sftp-server,保存退出。


第九步:启动openssh。在目标板上执行/usr/local/sbin/sshd,然后在pc上输入:ssh root@目标板的IP,输入密码,就登陆上开发板了。大笑大笑大笑

参考文章:移植ssh到ARM Linux开发板成功(标准步骤)