linux环境下 Qt 通过SSH 远程部署程序到开发板上
linux环境下 Qt 通过SSH 远程部署程序到开发板上
环境:
Qt Creator:qtcreator4.7.1
Qt:qt4.8.5
ubuntu:18.04
arm-Linux-gcc:4.4.3
配置openssh
原文链接:https://blog.csdn.net/u014213012/article/details/76850663
环境:
openssh-6.6p1
openssl-0.9.8e
zlib:zlib-1.2.11
一:移植openssh到嵌入式开发板上
(1)新建目录 装载编译后的可执行文件目录
/home/book/MS-V100/dowmload/ssh/install/zlib
/home/book/MS-V100/dowmload/ssh/install/openssl
/home/book/MS-V100/dowmload/ssh/install/openssh
(2)下载源码包到compressed目录下
openssh http://www.openssh.com/portable.html
openssl http://www.openssl.org/source
zlib http://www.zlib.net/
(3)解压文件到source目录下
zlib:tar xvf zlib-1.2.11.tar.xz
openssl: tar xvf openssl-1.0.1t.tar.gz
openssh:tar xvf openssh-6.6p1.tar.gz
(4)编译zlib
4.1:cd /home/yangtq/ssh/source/zlib-1.2.11
./configure -prefix=/home/book/MS-V100/dowmload/ssh/install/zlib
4.2:vi Makefile
CC=arm-linux-gcc
AR=arm-linux-ar rc //加了rc编译不过去 删除后待验证是否有效
CPP =arm-linux-gcc -E
LDSHARED=arm-linux-gcc
4.3:make -j4 && make install
(5)编译openssl
5.1:cd /home/yangtq/ssh/source/openssl-1.0.1t
5.2:./Configure -fPIC -prefix=/home/book/MS-V100/dowmload/ssh/install/openssl os/compiler:arm-linux-gcc
5.3: make -j4 && make install
JBY:上述config下 ssl被安装在了 /usr/local/ssl/
5.4 把 /usr/local/ssl/下的文件 复制到/home/book/MS-V100/dowmload/ssh/install/openssl
(6)编译ssh
6.1:cd /home/yangtq/ssh/source/openssh-6.6p1
6.2:./configure --host=arm-linux --with-libs --with-zlib=/home/book/MS-V100/dowmload/ssh/install/zlib --with-ssl-dir=/home/book/MS-V100/dowmload/ssh/install/openssl --disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar
6.3:make
错误解决:
OpenSSH交叉编译报错Can’t find recent OpenSSL libcrypto
在OpenSSL的Makefile中的CFLAG项中加入-fPIC,重新对openssl进行make & make install,重新编译OpenSSH
(7)操作开发板
(7.1)确保目标板上有以下目录,若没有,则新建:
/usr/local/bin/
/usr/local/sbin/
/usr/local/etc/
/usr/local/libexec/
/var/run/
/var/empty/
(7.2)从PC机上将以下文件拷贝到目标板Linux系统中
PC机 /home/yangtq/ssh/source/openssh-6.6p1 目录下的
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/
(7.3)生成Key文件
在PC机 /home/yangtq/ssh/source/openssh-6.6p1/ 目录下运行:
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 ""
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
将生成的 ssh_host_*_key这3个文件copy到目标板的 /usr/local/etc/目录下
我的生成之后拷贝到目标板上发现用不了,于是我就在目标板上执行语句
(7.4)修改目标板passwd文件。
在/etc/passwd 中添加下面这一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
(7.5)假如目标板root用户没有使用passwd root
(7.6)测试 在目标板上运行:
错误1
出现Permission denied的
解决办法
chmod 777 /usr/local/sbin/sshd
错误2
Permissions 0644 for '/usr/local/etc/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /usr/local/etc/ssh_host_ed25519_key
Could not load host key: /usr/local/etc/ssh_host_ed25519_key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available -- exiting.
解决办法
赋予key权限
[root@yctek etc]#chmod 600 ssh_host_dsa_key
[root@yctek etc]#chmod 644 ssh_host_dsa_key.pub
[root@yctek etc]#chmod 600 ssh_host_ecdsa_key
[root@yctek etc]#chmod 644 ssh_host_ecdsa_key.pub
[root@yctek etc]#chmod 600 ssh_host_ed25519_key
[root@yctek etc]#chmod 644 ssh_host_ed25519_key.pub
[root@yctek etc]#chmod 600 ssh_host_rsa_key
[root@yctek etc]#chmod 644 ssh_host_rsa_key.pub
执行ssh /usr/local/sbin/sshd 用ps命令查看sshd是否在工作
错误3
执行/usr/local/sbin/sshd 却ps查不到sshd
解决方案
请kill掉 135 root 0:00 /usr/sbin/dropbear
kill -9 135
如何重新执行 /usr/local/sbin/sshd
错误4
无法连接到主机: SSH协议错误:Host key of machine "192.168.1.253" has changed. Is the device connected and set up for network access
解决方案
1.passwd root
密码要求 大小写加数字
Jason82822433
2.QT 环境设备配置重新设置一遍
3.ssh-keygen -R xxx.xxx.xxx.xxx (服务器ip地址)
问题原因
OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告。
本地的SSH协议信息便失效了。SSH连接相同的ip地址时因有连接记录直接使用失效的协议信息去验证该ip服务器,所以会报错,使用上述命令便可以清除known_hosts里旧缓存文件。
删除xxx.xxx.xxx.xxx (服务器ip地址)的相关rsa的信息即可
PS:如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接! OK!不出意外的话可以成功,
主机上:
ssh root@192.168.1.253(开发板的ip)
然后输入开发板的root密码就就可以了。
//root密码就是你开发板上root的密码,如果之前root没有密码,需要重新设置,用passwd root,然后输入密码即可
二:远程部署程序到开发板上
(1)qtcreator->工具->选项->设备配置如下图
且通过test
(3)开启sshd后,没有找到sftp-server服务。
如secure-crt软件在连接时就出现以下错误,虽然还可以用终端,不过不能传输文件,
Failed to connect SFTP subsystem: Remote host may not have sftp-server installed : java.io.IOException: inputstream is closed
问题分析:明显的,这是没有找到sftp子服务。
问题解决:打开/usr/local/etc/sshd_config,找到这么一行:
Subsystem sftp /usr/libexec/sftp-server
看出问题了吧?配置文件中指明的sftp子服务并不是我们放的目录,所以修改为:
Subsystem sftp /usr/local/libexec/sftp-server
然后kill掉sshd,再启动就可以用sftp-server了。
(4)工程文件,添加如下代码
#要部署的目录
target.path=/mnt/userdata/test
#安装目标文件
INSTALLS+=target
#其他库和文件部署
mylibs.path = /mnt/userdata/test
mylibs.files=/home/book/GasManager/src/3rdparty/QDeviceWatcher_libQt5.11/lib/debug/libQDeviceWatcher.so
INSTALLS+=mylibs
#myConfig.path=/mnt/userdata/test
#myConfig.files=../../opt/wifi.sh
#INSTALLS+=myConfig
(5)配置项目如下图下面就可以看到刚才添加的目标文件路径,目标板可执行文件就存放在这里
(6)运行设置–>运行;目的是程序在目标板运行,而且将打印信息显示在本地,从而实现远程运行点击《添加》选择在《远程设备是运行》,参数选项的-qws如果目标板之前有窗口程序那么你就需要加上它。
报错:QWSSocket::connectToLocalFile could not connect:: Connection refused 则需要加-qws
如果配置完上诉步骤任然出现
错误输出👎 error: SFTP initialization failed: The SFTP server finished unexpectedly with exit 126
在开发板中赋予 下述文件高权限
chmod 777 sshd_config
chmod 777 /usr/local/libexec/sftp-server
并重启sshd应用
如果开发板中有 dropbear 且开机自启动 而不是的sshd的话
那么如果想远程部署程序 您需要先kill掉 dropbear进程 并开启sshd 这时您就可以远程部署了
QT5开发时遇到的错误
QT5 在使用SSH时遇到报错:QXcbConnection: Could not connect to display
解决方案1:
1. 首先 vim ~/.bashrc 然后在里面添加 export QT_QPA_PLATFORM='offscreen'
2. 即时生效 source ~/.bashrc
解决方案2:
vim /etc/profile , 添加 export DISPLAY=:0.0 ,wq,保存退出 ,再 source /etc/profile 生效。
更多推荐
所有评论(0)