简介
我们在使用Ubuntu进行开发时,常常需要用到远程连接控制的功能,在常用的方法中,ssh远程登陆控制是最常用的一种。
ssh是Secure Shell的缩写,即安全外壳协议,由IETF的Network Working Group网络小组所制定。其使用简单,且较为可靠,专为远程登录会话和其他网络服务提供安全性,利用ssh协议可以有效防止远程管理过程中的信息泄露。其最初用在UNIX系统上,后来迅速扩展到其他平台。
本文章将介绍如何使用ssh进行终端控制、代码开发以及视频传输流等。
配置ssh终端连接
既然是远程连接,就意味着我们需要两台电脑,控制的一方称为客户端,被控制的一方称为服务端。
客户端一般默认装有openssh-client,不需要配置。
服务端:
1. 安装ssh服务端
# 终端键入
sudo apt-get install openssh-server
2. 查看SSH是否安装成功
# 终端键入
ps -e |grep ssh
如果安装成功会显示如下界面:
3. 启动ssh服务
# 终端键入
service ssh start
4.开启远程连接服务
如果没有开启远程连接服务,我们就会看到以下错误信息:
Permission denied, please try again(publickey,password)
解决方法:
# 打开sshd_config配置文件
vim /etc/ssh/sshd_config
将其中PermitRootLogin后面修改成yes即可。
5.ssh连接
完成上述步骤,我们就可以开始进行ssh终端远程连接,但前提是我们知道服务器的IP地址,且客户端和服务器要在同一局域网(没有网络也可以)下
在服务端上终端键入
# 查看IP地址
ifconfig
然后在客户端执行
# ssh远程连接
ssh 用户名@ip地址
Remote-SSH远程开发
Remote-SSH是VS Code上一个非常好用的插件,其基于ssh能够实现在客户端上远程登陆服务端并在VS Code上进行代码开发。
1. 安装Remote-SSH插件
2.配置config文件
为了方便连接,我们可以在.ssh目录下创建一个config文件
cd .ssh/
touch config
打开config文件,键入以下内容
Host 服务端名称(可自己命名)
HostName 服务端IP地址
User 服务端用户名
写完config文件后,要进行远程登陆可以直接ssh 服务端名称即可。
3. vscode远程连接
点击vscode中左下角的绿色键,选择下图中的选项Connect Current Window to Host
然后选择Configure SSH Hosts…
选择刚刚配置过的config文件后,点击自己命名的服务端名称即可进行远程连接
连接后即可打开服务端上的工程进行远程代码开发,甚至还能够进行Debug!
使用GStreamer进行远程视频传输流
在远程开发的过程中,我们常常需要通过观察图形化界面,才能够知道运行的效果,但ssh终端控制下并不支持图形化的传输。例如,我们在使用opencv时需要imshow来观察图像处理的效果,这时候我们可以使用GStreamer作为IO,实现远程imshow
1. 服务端配置
# 安装GStreamer相关插件
sudo apt-get install gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly
# 安装GStreamer开发包
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
2. 重新编译OpenCv
注意,在编译时cmake加上**-D WITH_GSTREAMER=ON**,看GStreamer是不是都是Yes。
3. 传输视频流
接收端
# 接收视频流
sudo gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,media=video,payload=26,clock-rate=90000,encoding-name=JPEG,framerate=30/1 ! rtpjpegdepay ! jpegdec ! videoconvert ! autovideosink
成功开启后终端界面如下:
发送端
// 首先要先实例化用于传输视频流的VideoWriter
VideoWriter out("appsrc block=false ! queue leaky=downstream ! videoconvert ! video/x-raw,format=YUY2 ! jpegenc ! rtpjpegpay ! udpsink host=接收端IP port=5000",CAP_GSTREAMER,0,帧率,
图片大小,true);
实例化后,用out << frame;进行视频流传输。
后续
喜欢的话可以关注一下我的公众号技术开发小圈,尤其是对深度学习以及计算机视觉有兴趣的朋友,我会把相关的源码以及更多资料发在上面,希望可以帮助到新入门的大家!