SSU_SSH&SCP使用说明
1. 交叉编译¶
ssh scp工具编译时依赖于openssl,zlib,编译ssh scp工具之前得先交叉编译openssl和zlib。
1.1. openssl交叉编译¶
1.1.1. 源码下载¶
版本:1.0.2
资源包下载完成后,解压进入opensl-1.0.2u目录,执行Configure配置文件配置编译工具链和指定相应的安装路径,如下:
./Configure --prefix=/home/xxxx/install/openssl os/compiler:gcc make clean; make; make install;
编译安装完成后会在prefix配置的目录下release相关的头文件和库文件。
1.2. zlib交叉编译¶
1.2.1. 源码下载¶
版本:1.2.11
1.2.2. 编译¶
资源包下载完成后,解压进入zlib-1.2.11目录,执行configure文件配置安装目录,如下:
./configure --prefix=/home/xxxx/install/zlib
修改Makefile编译脚本
CC=arm-linux-gnueabihf-gcc LDSHARED=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-E AR=arm-linux-gnueabihf-ar
make clean;make; make install;
编译安装完成后会在prefix配置的目录下release相关的头文件和库文件。
1.3. ssh_scp_tool交叉编译¶
1.3.1. 源码下载¶
版本:5.6p1
资源包下载完成后,解压进入openssh-5.6p1目录,执行configure文件配置编译选项,如下:
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=../../ssh/install/zlib --with-ssl-dir=../../ssh/install/openssl --exec-prefix=/customer/ssh --prefix=/customer/ssh --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar make clean;make;
编译完成后在该目录下会生成相应的可执行bin文件
编译选项说明:
--prefix=install architecture-independent files in PREFIX[/usr/local] (将体系无关文件安装到目录PREFIX里,默认是/usr/loacl)
--with-zlib= zlib安装路径
--with-ssl-dir=openssl 安装路径
--host= 交叉编译出来的程序运行的平台
2. 环境搭建¶
2.1. 目录文件夹,拷贝相关文件¶
mkdir /home/xxxx/target
在target目录下创建etc,lib,sbin目录
(1) 进入完成编译的openssh-5.6p1目录下,拷贝资源,执行命令如下:
cp moduli ssh_config sshd_config /target/etc cp sshd scp /target/sbin
(2) 在openssh-5.6p1目录下,执行命令如下,生成key值和拷贝相关的资源
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 "" cp ssh_host_*_key /target/etc
(3) 相关库文件拷贝,执行命令如下:
从安装的zlib安装目录lib里拷贝libz.so到/target/lib目录下
从toolchain安装目录中相关库文件到/target/lib目录下,分别有:
libc/usr/lib/libcrypt.so lib/lib/libresolv.so.2 libc/usr/lib/libutil.so libc/usr/lib/libnss_files.so.2 libc/usr/lib/libnss_compat.so.2
2.2. 文件打包和启动配置¶
(1) 在/project/release/chip/p5/dispcam/common/glibc/6.4.0/bin/debug目录下新建一个ssh文件夹,将target目录下的sbin,etc,lib四个文件夹拷贝到工程代码里/project/release/chip/p5/dispcam/common/glibc/6.4.0/bin/debug目录下,代码工程编译时会自动拷贝到/customer目录下。
(2) 修改/target/etc/sshd_config,制定ssh_host_rsa_key, ssh_host_dsa_key默认路径和PermitEmptyPasswords参数
HostKey /customer/ssh/etc/ssh_host_rsa_key HostKey /customer/ssh/etc/ssh_host_dsa_key PermitEmptyPasswords yes
(3) 修改rootfs分区打包的脚本:
-
修改root用于默认密码为1234,用于ssh登陆;
板子上使用的passwd root命令,密码为1234,系统会更改/etc/passwd文件,将/etc/passwd文件中的root一行拷贝即为root用户密码配置;
Ps:要使用passwd root命令时,编译sdk配置rootfs不能为squashfs系统,squashfs为只读系统,passwd命令无法修改/etc/passwd文件
-
添加sshd用户,不然sshd启动会报错,即增加sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin;参考修改内容如下:
3. 测试验证¶
3.1. ssh验证¶
打开cmd或者xshell,输入 ssh root@172.xx.xx.xx
,能够正常访问到设备shell的话,代表连接成功。
3.2. scp验证¶
打开cmd或者xshell,输入 scp root@172.xx.xx.xx
,能够与PC机进行文件上传或者下载,代表scp使用正常。
4. 常用Q&A¶
Q1:使用scp时,报错Could not chdir to home directory /home/root:No such file or directory
此问题不影响scp的正常使用,可忽略。板子端做远端时,账号密码信息没有保存到/home目录下,需要把远端服务器rootfs改成可写文件系统,在/home下创建对应账号文件夹,scp会创建如下路径和文件且保存密钥。
Q2: 本地有scp命令或scp运行文件,但还是报sh:scp:not found
[SSD26X]此报错是指远端sh命令中没有scp,并不是指本地。scp会通过ssh给远端下scp cmd,从code中加打印可以看到命令如下:
板子做远端时,busybox下没有scp命令,所以执行此命令时会报找不到sh命令错误。在rootfs.mk加如上内容,打包的时候会把scp加到/bin下,可以在任意路径执行scp,解决报错问题。
Q3: 执行scp时板子上有libutil.so.1等scp依赖库,也声明了路径,把声明加到了/etc/profile和/etc/init.d/rcS,但还是会报无法打开库的错误
scp源码链接路径写死了,依赖的几个so库要放在rootfs的/lib目录下。在rootfs.mk加如上内容,打包的时候会把对应库打包到/lib下,解决如上报错。