欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

openssh移植

程序员文章站 2022-06-11 16:55:40
...

实验环境: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 openssh
mv  源码包   openssh目录
tar -xf   源码包
3个源码包分别移动,然后看看ssh目录下是否都有源码包了,然后开始解压,如果终端提示没有权限,如果终端提示没有权限,就命令前面加sudo。 
aaa@qq.com:~/linux/ssh$ cd ../openssh/
aaa@qq.com:~/linux/openssh$ ls
openssh-7.0p1.tar.gz  openssl-1.0.2l.tar.gz  zlib-1.2.11.tar.gz
aaa@qq.com:~/linux/openssh$ tar -xf zlib-1.2.11.tar.gz 
aaa@qq.com:~/linux/openssh$ tar -xf openssh-7.0p1.tar.gz 
aaa@qq.com:~/linux/openssh$ tar -xf openssl-1.0.2l.tar.gz
aaa@qq.com:~/linux/openssh$ ls
openssh-7.0p1         openssl-1.0.2l         zlib-1.2.11
openssh-7.0p1.tar.gz  openssl-1.0.2l.tar.gz  zlib-1.2.11.tar.gz
aaa@qq.com:~/linux/openssh$                                     

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

aaa@qq.com:~/linux/openssh$ cd zlib-1.2.11/
aaa@qq.com:~/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.
aaa@qq.com:~/linux/openssh/zlib-1.2.11$ vim Makefile
aaa@qq.com:~/linux/openssh/zlib-1.2.11$ make && make install

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

aaa@qq.com:~/linux/openssh/zlib-1.2.11$ ls ../install/zlib-1.2.11/
include  lib  share
aaa@qq.com:~/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三个文件夹,这说明安装成功。
aaa@qq.com:~/linux/openssh/zlib-1.2.11$ ls ../install/zlib-1.2.11/
include  lib  share
第二步:交叉编译openssl,步骤与zlib类似。进入到解压后的openssl目录,终端输入:
aaa@qq.com:~/linux/openssh/zlib-1.2.11$ cd ../openssl-1.0.2l/
aaa@qq.com:~/linux/openssh/openssl-1.0.2l$ ./Configure --prefix=/home/fh/linux/openssh/install/openssl-1.0.2l 
os/compiler:arm-none-linux-gnueabi-gcc
make[1]:正在离开目录 `/home/fh/linux/openssh/openssl-1.0.2l/test'

Configured for os/compiler.
aaa@qq.com:~/linux/openssh/openssl-1.0.2l$ make && make install
......................
make[1]:正在离开目录 `/home/fh/linux/openssh/openssl-1.0.2l/tools'
installing libcrypto.a
installing libssl.a
cp libcrypto.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig
chmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/libcrypto.pc
cp libssl.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig
chmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/libssl.pc
cp openssl.pc /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig
chmod 644 /home/fh/linux/openssh/install/openssl-1.0.2l/lib/pkgconfig/openssl.pc
aaa@qq.com:~/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 -lresolv

aaa@qq.com:~/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.
aaa@qq.com:~/linux/openssh/openssh-7.0p1$
没有报错,这就成功了。

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

scp sftp ssh ssh-add ssh-agent ssh-****** 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-****** -t rsa -f ssh_host_rsa_key -N ""

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

                                  /usr/local/bin/ssh-****** -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移植openssh移植

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

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




相关标签: openssh 移植