windows和 Linux 下通过 QProcess 打开ssh 和vnc

SSH

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的**安全网络协议**。它是专为远程登录会话(**甚至可以用Windows远程登录Linux服务器进行文件互传**)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。**目前已经成为Linux系统的标准配置**。

SSH的安全机制
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

SSH验证

但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击

第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

启动SSH

启动服务器的SSH服务
首先确认ssh-server是否已经启动了

ps -e | grep ssh

在这里插入图片描述
如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:

sudo /etc/init.d/ssh start 

停止和重启ssh服务的命令如下:

sudo /etc/init.d/ssh stop  #server停止ssh服务 
sudo /etc/init.d/ssh restart  #server重启ssh服务

接下来就可以进行使用客户机远程登录服务器了~
SSH两种级别的远程登录

一、口令登录

口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址 eg:

ssh ldz@192.168.0.1

如果需要调用图形界面程序可以使用 -X 选项

ssh -X ldz@192.168.0.1

如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

ssh 192.168.0.1

还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:

ssh -p 1234 ldz@192.168.0.1

客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址

如果是第一次登陆,会给出如下提示:
在这里插入图片描述
意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,确定想要继续连接吗?

输入yes即可。这时系统会提示远程主机被添加到已知主机列表。
在这里插入图片描述
然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。

在这里插入图片描述

二、公钥登录

每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

1、在本机生成密钥对

使用ssh-keygen命令生成密钥对:

ssh-keygen -t rsa   #-t表示类型选项,这里采用rsa加密算法

然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。

2、将公钥复制到远程主机中

使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中

ssh-copy-id ldz@192.168.0.1

经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。

通过Qprocess 启动ssh

原理,通过Qprocess打开cmd,通过cmd输入指令 打开ssh

        QProcess *p = new QProcess(this);
        QStringList args;
#ifdef WINDOWS
        args << "/C" <<"start"<<m_sshPath<<m_sshUser +"@"+ cc->m_IP;//"C:\\test\\ssh.exe"
        p->startDetached("cmd.exe", args);//QStringList()<<"/c"<<"start"<<"cmd"//启动cmd
#else
        args<<"-e"<<"/usr/bin/ssh"<< m_sshUser +"@"+ cc->m_IP;
        p->startDetached("/usr/bin/xterm",args);
#endif
        int res = p->exitCode();
        qDebug() << "exit code = " << res<<"error"<< p->readAllStandardError();

在windows环境下,是用cmd来打开ssh,代码执行完成后会弹出一个输入密码的界面,
输入密码验证通过之后,就算是成功登录了。
在Linux环境下,是通过打开xterm,通过xterm来打开ssh,并连接的。xterm是Linux下的一个终端执行程序,不同的Linux下的终端程序不一样,他可能是xterm也可能是gnome-terminal,Konsole, Terminator,这些程序一般都是/usr/bin下面。

VNC Viewer简介

VNC是一款开源的远程控制软件,功能强大且高效实用,其性能不逊色同类软件,它的工作原理和WIN远程控制软件类似。

整个 VNC 一般运行的工作流程如下:

(1) VNC 客户端通过浏览器或 VNC Viewer 连接至 VNC Server。

(2) VNC Server 传送一对话窗口至客户端,要求输入连接密码(可能为空),以及存取的 VNC Server 显示装置。

(3) 在客户端输入连接密码后,VNC Server 验证客户端是否具有存取权限。

(4) 若是客户端通过 VNC Server 的验证,客户端即要求 VNC Server 显示桌面环境。

(5) 被控端将画面显示控制权交由 VNC Server 负责

vncViewer的下载和安装

通过QProcess启动vncViewer

        QProcess *p = new QProcess(this);
        QStringList args;
#ifdef WINDOWS
        args << "/c" << m_vncPath<< cc->m_IP;//"D:\\Program Files\\RealVNC\\VNC Viewer\\vncviewer.exe"
        p->startDetached("cmd.exe",args);//QStringList()<<"/c"<<"start"<<"cmd"
#else
        args<<cc->m_IP;
        p->startDetached("/usr/bin/vncviewer",args);
#endif
        int res = p->exitCode();
        qDebug() << "exit code = " << res<<"error"<< p->readAllStandardError();

在widows环境下是通过启动cmd,通过cmd来启动的vncViewer,在Linux环境下可以直接启动vncViewer。
参考文章1

参考文章2

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值