前言
gdb和gdbserver的安装是在线调试的基础,熟悉命令行调试的在这一阶段就可以开心debug了,距离vscode的图形化界面还是有点一段距离,Remote Development插件是依赖ssh的,我们还需要确保板子的ssh功能正常启用。一般来说busybox可以直接配置,出于普遍性考虑这里也自己总0搭建
ssh
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
需要我们交叉编译的软件包叫openssh,依赖zlib和ssl库才能编译和运行
zlib
可以参考之前移植OSD时的配置
openssl
https://www.openssl.org/source/old/下载 ./Configure --prefix=/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/mpp/openssh/lib/openssl1.0.2 os/compiler:aarch64-himix100-linux-gcc make make install
编译前在MakeFile 的 cflag 添加 -fPIC,否则生成的libcrypto.a的stderr函数不可用,configure ssh的时候失败
openssh
./configure --host=aarch64 --prefix=/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/mpp/openssh/ --with-zlib=/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/mpp/zlib-1.2.11 --with-ssl-dir=/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/mpp/openssh/lib/openssl1.0.2/include --disable-etc-default-login --disable-strip --without-openssl-header-check CC=aarch64-himix100-linux-gcc
报错1,找不到ssl的头文件,
“OpenSSL headers missing - please install first or check config.log”
查看config.log,修改configure文件的头文件为绝对位置(先在ssl的安装目录中find一下)
如下 ac_fn_c_check_header_mongrel “$LINENO” "/root/3531dv2/ssh/lib/openssl-1.0.2p/include/openssl
(如果host为aarch64-himix100-linux也会有这样的问题,改为aarch64则可以正常编译通过)
报错2,找不到openssl ctypto ,
“Can’t find recent OpenSSL libcrypto”
应该在编译 ssl 的时候添加 -fPIC
make
openssh不用make install
报错3,config不支持64位(参考OSD1)
“Invalid configuration aarch64-linux-gnu’: machineaarch64’ not recognized”
参考 https://blog.csdn.net/Brouce__Lee/article/details/96999883
wget -O config.guess ‘http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD’
wget -O config.sub ‘http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD’
其他注意事项
【如果sshd启动失败:】
1、需要使用全局目录启动:
~ # /usr/local/sbin/sshd
2、启动配置文件和密码文件,不存在或者权限不对:
修改相应目录和文件的权限。
3、密码文件还是打开失败,关于密码的:
最终解决办法是,网上找一个教程能完整通过的版本,
最后使用的版本是openssh-7.7p1.tar.gz 和openssl-1.0.2p.tar.gz
【需要:】
板卡目录需要修改empty的所属用户和组
/var # chown root.root empty -R
https://blog.csdn.net/weixin_44604730/article/details/105765331
【需要:】
sshd_config ,和密钥文件需要修改权限,大概是只能root用户有读写权限。网上教程很多关于权限的说明
【如果root用户登录失败:】
1、修改配置文件sshd_config 这个字段,并把 ’#‘ 去掉
 PermitRootLogin yes
2、密码记错了
在串口终端上 修改密码,命令: passwd root,则提示输入两次root用户的密码
【如果sftp传输文件失败:】
1、可以查看 /usr/local/etc # sshd_config 配置文件中的
#Subsystem sftp /usr/local/libexec/sftp-server
这一行的sftp-server的程序目录是否正确。
作者使用本方法依然不成功,原因未知,不深究,方法2也够用。
2、如果还是没解决,则
最终使用了 内部sftp
修改成了 Subsystem sftp internal-sftp
https://blog.csdn.net/bon_mot/article/details/78615713
测试
ssh的运行需要基于zlib的动态库,需要将lib目录下的libz.so.1cp到板子的/usr/lib目录下
(这个忘记cp会有报错提示)
测试ssh
SHA256:4yvSZI7csV9FK78CWM0rqTmGAwb2tR7NZH0XFt09Vx0 root@(none) The key's randomart image is:+..-[RSA 2048]...-+ .EB 0.本.0 十 +o . 0S..oo. 0 B.*..+.@车.0.=告 0. o to +----[SHA256]-----+ /mnt/openssh/keygen # ping 192.168.119.128 PING 192.168.119.128 (192.168.119.128): 56 data bytes 64 bytes from 192.168.119.128: seq=0 ttl=64 time=1.580 ms64 bytes from 192.168.119.128: seg=1 ttl=64 time=1.460 ms^C ... 192.168.119.128 ping statistics 2 packets transmitted, 2 packets received packet loss round-trip min/avg/max =1.460/1.520/1.580 ms/mnt/openssh/keygen # vi /etc/passwd /mnt/openssh/keygen # ssh book192.168.119.128 The authenticity of host"192.168.119.128(192.168.119.128)" can't be established. EcDsAkeyfingerprintisSHA256:dBZ23s3GeEzTdVULRAwSWKTYRQtmo7FUv6qmXrplsMg. Are you sure you want to continue connecting (yes/no)? yes Warning:Permanently added "192.168.119.128(ECDSA) to the list of known hosts. book@192.168.119.128's password: Welcome to ubuntu 16.04.7 LTs(GNU/Linux 4.15.0-142-generic x86 64) * Documentation: https://help.ubuntu.com Management: https://landscape.canonical.com Support: https://ubuntu.com/advantage UA Infra: Extended Security Maintenance (ESM) is not enabled. 0 updates can be applied immediately. 248 additional security updates can be applied with uA Infra: ESM Learn more about enabling uA Infra: Esm service for ubuntu 16.04 at https://ubuntu.com/16-04 Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Jun 16 09:49:03 2022 from 192.168.119.100 book@www.100ask.org:~$ls config.guess Documents Music hostsback.tar.gz Public Videos Desktop config.sub Downloads examples.desktop Pictures share Templates Hx--1024
测试sshd
运行sshd,提示是需要绝对路径的
sshd re-exec requires execution with an absolute path
/mnt #sshd sshd re-exec requires execution with an absolute path/ant #/mnt/openssh/openssh-7.6pl/sshd /home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/mpp/ssh/etc/sshd_config: No o such file or directory
那就绝对路径运行,显示空文件
检查下环境,决定通过-f指定路径
/mnt/openssh/openssh-7.6p1/sshd -f /mnt/openssh/openssh-7.6p1/sshd_config
Privilege separation user sshd does not exit
/mnt#/mnt/openssh/openssh-7.6pl/sshd -f/mnt/openssh/openssh-7.6pl/sshd_config Privilege separation user sshd does not exist/mnt #
adduser sshd后即可解决
Could not load host key:
/mnt/ssh/etc3/mnt/openssh/openssh.7.6p1/sshd-f/mnt/openssh/openssh-7.6p1/ssh d contig Couldnotload hostkev:/home/bock/Downloads/hi3995tools/Hi3559AV100 S0KV2.0.3.1/mop/ssh/etc/ssh host rsa kev Could notload hostkey:/home/book/Dwnloads/hi3995tools/Hi3559AV100_soK_V2.0.3.1/mpp/ssh/etc/ssh host dsa key Could not load host key:/home/book/Downloads/hi3995tools/Hi3559AV100_soKV2.0.3.1/mpp/ssh/etc/ssh host ecdsa key Could not load hostkey:/home/book/Downloads/hi3995tools/Hi3559AV100soKV2.0.3.1/mpp/ssh/etc/ssh host ed2ssi9 key ehd. no bartlour nurebin
首先生成需要的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 ""
接下来以绝对路径配置key的位置(sshd_config文件中)
HostKey /mnt/ssh/etc/ssh_host_rsa_key HostKey /mnt/ssh/etc/ssh_host_dsa_key
重启
/mnt/openssh/openssh-7.6p1/sshd -f /mnt/openssh/openssh-7.6p1/sshd_config restart
pc侧无法登陆permission denied(publickey,password,keyboard-interactive)
再次修改config文件
# PermitRootLogin prohibit-password PermitRootLogin yes
还是没有奏效,想到系统是没有密码的,于是设置了root用户的密码再次登录
终于成功了
book@www.100ask.org:~$ ssh root@192.168.119.200 root@192.168.119.200's password: Welcome to hilinux. None of nfsroot found in cmdline.
补充
写笔记时有点晚了,有些细节有遗忘不太系统,海哥发了篇参考笔记非常详尽,还有疑惑时可以参考
https://www.freesion.com/article/7339867933/