1.下载源码
- 从https://www.openssl.org/source/下载openssl-1.0.2l.tar.gz
- 从http://www.zlib.net/下载zlib 1.2.11
- 从http://www.openssh.com/portable.html下载openssh-7.5p1.tar.gz
2.交叉编译zlib
- 解压zlib文件 tar zxvf zlib-1.2.11.tar.gz
- 在操作的当前目录下新建安装文件所需文件夹 mkdir install,例如我操作的在/opt/openssh/的目录下,那么我新建文件夹install的最终新建目录为/opt/openssh/install
- 编辑配置文件
$ /opt/openssh/install/zlib_install $ gedit Makefile
- 修改Makefile,修改内容如下
CC=arm-linux-gnueabihf-gcc CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 #CFLAGS=-g -DZLIB_DEBUG #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ # -Wstrict-prototypes -Wmissing-prototypes SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN LDFLAGS= TEST_LDFLAGS=-L. libz.a LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map CPP=arm-linux-gnueabihf-gcc -E STATICLIB=libz.a SHAREDLIB=libz.so SHAREDLIBV=libz.so.1.2.11 SHAREDLIBM=libz.so.1 LIBS=$(STATICLIB) $(SHAREDLIBV) AR=arm-linux-gnueabihf-ar ARFLAGS=rc RANLIB=arm-linux-gnueabihf-ranlib LDCONFIG=ldconfig LDSHAREDLIBC=-lc TAR=tar SHELL=/bin/sh EXE=
- 编译
$ make install
3.交叉编译openssl
- 解压openssl文件夹
- 配置编译选项并编译
$ ./Configure --prefix=/opt/openssh/install/openssl os/compiler:arm-linux-gnueabihf-gcc $ make $ make install
4.交叉编译openssh
- 配置编译选项
其中的--prefix参数没有作用,因为里面编译好的文件要安装到开发板,所以不用make install。所以作用不大./configure --host=arm-linux --prefix=/usr/local/openssh --with-zlib=/opt/openssh/install/zlib_install --with-ssl-dir=/opt/openssh/install/openssl --disable-etc-default-login --disable-strip CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar
- 编译
$ make
5.安装文件部署到开发板
- 开发板中新建以下目录(如果存在不用新建)
/usr/local/openssh/bin /usr/local/openssh/etc /usr/local/libexec /var/run /var/empty
- 拷贝openssh中make生成的文件scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan到
/usr/local/openssh/bin
- 拷贝moduli ssh_config sshd_config到
/usr/local/openssh/etc
- 拷贝sftp-server ssh-keysign到
/usr/local/libexec
- 拷贝sshd到
/usr/local/sbin/
创建密码对(可以在主机上创建也可以在目标板上创建)
7. 修改配置文件
sshd_config文件里的
PermitRootLogin yes
X11Forwarding yes
X11DisplayOffset 2
注意:由于最终我需要使用windows下的xshell登陆openssh,所以需要修改X11支持选项
8.添加root登陆密码
修改/etc/passwd文件,修改第一行 root:3XZuGkdinLneI:0:0:root:/home/root:/bin/sh。红色的部分是密码1(可以通过命令root passwd修改后看看变成什么,移植的时候自己 修改passwd文件就 可以了)的加密后的密码登陆的时候使用
在最后一行添加:
sshd:x:74::74:Privilege-separatedSSH:/var/empty/ssh:/sbin/nologin
登陆配置如下
6.遇到的问题
登陆的过程中遇到用Ubuntu的终端登陆是报PTY allocation request failed on channel0 错误,然后用xshell登陆不上去,原因是shell的解析需要pts的支持。执行下列命令即可
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts
如果执行mount /dev/pts遇到问题的话,可以参考我的另一篇文章。
因为/dev里面的内容会随着重启消失,建议将上述内容写进启动脚本