远程操控

VNC 就是一个将你 Linux 屏幕输出到另一台电脑上的软件, SSH 则是将你现在电脑的 Terminal 链接上 Linux Terminal, 用代码控制 Linux。SSH 是一种加密的通信通道, 也能保证你的安全。使用 SSH 将会更加顺畅 (VNC 输出桌面图像会卡)。

从MacOS或Linux通过SSH远程Linux

1、给 Linux 安装 OpenSSH

为了实现 SSH 功能, 你得确定你的 Linux 上有安装了 SSH 服务, 通常可能是没有安装的. 所以我们将要安装一个开源的 SSH 工具, 叫做 OpenSSH, 将你的 Linux 变成一个服务器 (就是像你访问网站一样访问你的 Linux). 在 Linux 上打开你的 Terminal, 然后输入下面这句话安装 openssh-server,sudo 是使用管理员权限的意思, 所以回车后它可能要求你输入你用户密码

$ sudo apt-get install openssh-server

如果你之前没有安装过, terminal 会提示你将要有多少东西被安装, 需要你确认。确认完了以后, 它将会帮你继续安装。

2、Mac 或 Linux SSH 去 Linux

现在你的 Linux 是一个可以被 SSH 登录的状态了. 我们先从 MacOS 或者是你另一台 Linux 远程这台 Linux 开始. 因为 MacOS 和 Linux 都是类似的系统, 所以操作起来比 Windows 简单.

我有 Mac, 所以使用 Mac 来 demo 具体操作, 这个操作和你用 Linux 操作 SSH 是一样的. 你只需要打开 Mac 上的 Terminal. 然后输入:

$ ssh [要控制的用户名]@[它的IP地址]

举个例子, 我要用 mac 来操控的 Linux 的用户名叫做 morvan, morvan这台 linux 的 ip 地址可以这样获取. 首先, 回到要控制的 Linux 上, 确保你操控和被操控的两台电脑连接上了同一个路由器. 然后在你 被操控 电脑的 terminal 上输入这个获取 被操控 电脑的 ip 号码.

$ ifconfig

如果它提示你没有安装 ifconfig, 你就按它的要求安装就好. 输入下面指令就能安装:

$ sudo apt install net-tools

确保 ifconfig 能用后, 输入 ifconfig, 接着找到以 inet 开头的字样, 这就是你在这个路由下的 ip 地址了. 比如我现在的 ip 是 192.168.0.114

inet addr:192.168.0.114

找好了 ip (192.168.0.114), 知道你被操控电脑的用户名 (morvan), 现在回到操控电脑的 terminal (我的 Mac). 在 terminal 中输入之前提到的 ssh 开头的命令. 然后它就会要求你输入被操控的 Linux 的用户密码. 很显然, 只有知道密码的人才能登陆你的 Linux, 不然就太容易被黑了.

$ ssh [email protected]
[email protected]'s password:

注意:有可能你在尝试这样直接 ssh 的方式失败. 像我, 刚从16版的 Ubuntu 升级到 17 版, 我的 Mac 由于某些原因不让我 ssh 去 17 版的 Ubuntu, 显示了下面的报错, 后来查了一下, 找到了一个解决方式.

ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
........
ERROR: ECDSA host key for 192.168.0.114 has changed and you have requested strict checking.
ERROR: Host key verification failed.

如果你也看到上面这种报错, 直接在你的电脑上 (我的 Mac 上) 的 terminal 运行下面这个:

$ ssh-keygen -R 要 ssh 去的 ip 比如下面这样
$ ssh-keygen -R 192.168.0.114

恢复正常后, 接着再按上面的步骤 ssh 去 Ubuntu. 输入, 确认密码后, 你在操控电脑的 terminal 就会瞬间变成被操控电脑的 terminal 啦. 他会显示这样一些信息证明你登录成功. 现在你就能自由的运用之前所学的 Linux 的指令, 在你的电脑上远程操控 Linux 电脑啦.

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

147 packages can be updated.
53 updates are security updates.

Last login: Sun Oct 15 00:21:56 2017 from 192.168.0.104
morvan@morvan-Latitude-E5550:~$

3、省略密码直接登录

不过你还可以更进一步, 现在你每 SSH 登录一次 Linux, 都需要输入密码, 如果你登录次数很频繁, 而却你的密码又设置得很长, 这就非常麻烦. 还好, 我们可以通过提前设置一个”保密协议”, 来让你的 Linux 识别出哪些电脑能不用密码登录. 这就是 public/private rsa key.

我们将在 Mac 或者 Linux (控制电脑) 上生成一个 public/private keypair (公钥和私钥), 然后将公钥(public key) 复制到要被远程的 Linux 上. 这样当你有私钥的控制电脑要远程操控这台有公钥的 Linux, 他会帮你识别配对的. 就不用每次都要输入被远程的电脑密码了.

所以首先我们还是用我的 Mac demo, 在 mac 的 Terminal 上输入指令 ssh-keygen 创建公钥和私钥, 它会提示你要保存这些锁的地方. 我们就用它默认的地方比较好. 所以回车确定.

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/MorvanZhou/.ssh/id_rsa):

确定后, 它会弹出下面这个, 要你来确定你是否想要一个保障密码, 如果你确定你的局域网是安全的, 这个都可以不填. 我就不填, 所以我直接回车.

Enter passphrase (empty for no passphrase):

然后它会要求你再次确认, 回车

Enter same passphrase again:

最后, 它会显示类似于这样的东西告诉你, 你的锁都已经生成好了.

Your identification has been saved in /Users/MorvanZhou/.ssh/id_rsa.
Your public key has been saved in /Users/MorvanZhou/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yVr3PAPmxVO1lBd7KvqBsBCZSE8mdYce8mjBiUfRDVE MorvanZhou@Morvan
The key's randomart image is:
+---[RSA 2048]----+
|    o=*++*E    o+|
|   ..**++..   .o+|
|    ..=* .    .oo|
|      ooo. . . ..|
|     .. S + = .  |
|       + * B o   |
|      . . + *    |
|           . +   |
|            .    |
+----[SHA256]-----+

接着, 我们就要将这个生成好的 “公钥” 给复制去你的 被控制的 Linux. 指令结构还是和上面一样.

$ ssh-copy-id [被控制的用户名]@[它的ip]

我被控制的 Linux 用户叫 morvan, 他的 IP, 我通过了上面描述的方式找到了. 所以我就输入下面这样. 回车后他会要求你输入一次 被控制端电脑的密码.

$ ssh-copy-id [email protected]

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/MorvanZhou/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

密码正确后, 它将输出, 并告诉你的怎么用 ssh 登录被控制端的电脑.

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

最后, 我们开开心心地在 Mac/Linux ssh 被控制的电脑吧~ 这次登录的时候没有被要求输入任何密码~

$ ssh [email protected]

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

147 packages can be updated.
53 updates are security updates.

Last login: Mon Oct 16 08:36:26 2017 from 192.168.0.111

从Windows通过SSH远程Linux

1、给 Linux 安装 OpenSSH
2、Windows SSH 软件 PuTTY

在 Windows 上, SSH 不像 Linux 和 MacOS 那样常用, 而且 Windows 的系统内核也和 Linux 不太一样. 所以我们用一个软件来实现 SSH 比较合适. PuTTY 是一个开源, 免费, 而且常被使用的 SSH 软件. 首先, 我们得下载这个软件.

安装好之后, 在开始菜单中找到 PuTTY, 并打开 PuTTY, 你会看到下面这样. 然后在 “Host name (or IP address)” 那填上被控制的 Linux 的 IP.

点击 Open 按钮, 你就能登录 Linux 啦, 它还会跳出一个小窗, 让你确认这台电脑是不是你要链接的电脑. 如果你在自己家的局域网内,就不用担心安全问题, 直接点 Yes 就好。

从手机(Android安卓/IOS苹果)通过SSH远程Linux

1、给 Linux 安装 OpenSSH
2、手机 SSH 的 app
安卓里有很多 ssh 的 app. 苹果肯定也不少. 其实你只要用 “SSH” 搜搜 app store 里面. 里面就会有非常多的可用 app. 我以 “JuiceSSH” 举例. 其他的应该都大同小异.
下载好 “JuiceSSH”. 打开你的这个 app, 如果你还没有创建过任何 ssh 链接. 你将需要点击 “Connections”, 自己创建一个连接.
下一步中, 我们唯一需要的就是你要连接去, ssh 去的 IP 地址.
ip 地址原封不动的放在 “Address” 这一栏中. 接着点击右上角的那个勾确定添加这个连接.
确定后它会跳出一个窗口, 让你确认你要连接上的电脑是否是你真正要连接上的电脑. 如果你在自己家中的路由器下, 就不用担心, 别人也很难黑得了你. 如果你在一个公用路由下. 你还是得再三检查一下, 免得到时候被黑客攻击.
然后就是输入你 Linux 电脑的用户密码了. 确认后你就能在手机上正常使用 ssh 控制你的 Linux 电脑.

用TeamViewer和VNC从远程控制电脑

VNC 或者 Teamviewer 这种工具都是提供你一个可以远程图像化桌面的方式. 他们都是第三方软件.

1、TeamViewer

Teamviewer 其实已经发展得很成熟了. 它是一个跨平台的远程操控软件. Windows, MacOS, Linux, 手机都可以下载使用. 它会通过外网, 将你的被控制电脑桌面投影到你的控制电脑上. 不过的流畅度, 速度大大取决于你的网速. 如果你是想做一个小规模, 控制局域网内(电脑都在同一个路由下)的电脑. 我觉得还是 VNC 快一点, 因为它不走外网. 当然, 最快的还是 SSH 啦, 都不用输出图像, 直接代码控制而已.

2、VNC

其实 VNC 是一种软件的统称. 只要你的 Linux 架设好了一个服务器 (Server) 的 VNC, 客户端, 比如你的 Mac, 手机, 只要安装任何一种 VNC 客户端软件就能链接上服务器端的电脑啦. 如果你手头有一个 Raspberry Pi (树莓派), 会用 VNC 对你很实用. 那么首先, 我们就来设置这个服务器端的 VNC 吧. 打开你的 Linux 电脑, 打开 Terminal. 输入:

$ sudo apt-get install x11vnc

确认你的 Linux 用户密码, 就能安装这个最常用的 x11vnc 软件啦. 这个软件的使用, 设置非常简单. 安装好后, 最好给你的 x11vnc 设置一个密码. 我不设密码时, 用 Mac 还登不上, 一定要设完密码,用密码登录 Linux 的 VNC server 才能上.
所以设置密码的过程就是在你的 Linux Terminal 输入下面这样, 然后它会提示你要输入你要的密码, 这个密码是用来连接 VNC 的时候, 登录用的.

$ x11vnc -storepasswd

Enter VNC password:
Verify password:
Write password to /home/morvan/.vnc/passwd?  [y]/n y
Password written to: /home/morvan/.vnc/passwd

设置好之后, 在你的 Linux terminal 中输入下面指令, 要求用密码形式来开启 VNC 的 server.

$ x11vnc -usepw

如果你使用的是 ubuntu 17.10, 截止至目前 (2017年10月27日) 对于 VNC 还有一个 bug 没有修复. 所以 17.10 版本的 Ubuntu 如果你尝试上面的方式发生下面这种问题, 你就要尝试一下接下来说的方法了.

X Error of failed request: BadMatch (invalid parameter attributes)
  Major opcode of failed request: 73 (X_GetImage)
  Serial number of failed request: 41
  Current serial number in output stream: 41

首先这个问题, 我查了很久, 最后发现是新版 ubuntu 的桌面显示升级了, 好像是变成3D, 然后以前的 2D 形式的 x11vnc 都不支持. 所以我们要换一种形式的桌面. 首先要做的就是 logout 你的电脑. 在桌面右上角, 选着你的用户, 然后 logout.
然后再选择不同的桌面方式 (Xorg) 登录 ubuntu. 这样一来, 如果再重复上面的 x11vnc 启动方式, 你就不会报错了.

最后, 如果出现频繁跳出 x11vnc 的现象, 尝试在开启 x11vnc 的时候直接输入这个参数, 让它永远运行.

$ x11vnc -usepw -forever

3、用 Mac 连接 VNC

开启完之后, 使用 Mac 来连接 Linux 的 VNC 很方便, 在 Mac 中, 有一个软件叫 Screen Sharing. 打开它, 输入你 Linux 在局域网的 IP 地址(可以在 Linux 中输入 ifconfig 查到). 点 Connect, 最后输入你刚刚设置的 VNC 密码, 就能连上啦

4、用 Linux 连接 VNC

Linux 的话, 它自带就有一个 VNC 软件. 只要你在右上角搜一下 “VNC”, 那个被我圈出来的软件就是一个 Client 端的 VNC. 点开它, 输入 server 端的 IP 和他的密码就好.
在这里插入图片描述
5、用 Windows 连接 VNC

至于 Windows 呢, 其实有很多选项, 我们已经在 Linux 端设置好了一个 VNC server. 在 Windows 端, 我们需要的只是一个 VNC client. 而有很多软件可以实现 VNC client 这个功能. 我在下面列举一些:TightVNC (免费)、RealVNC (免费)

RealVNC 有两种选项, 一个是 VNC Viewer, 用来做 client 端的(控制). 一个是 VNC connect, 用来做 server 端的(被控制).

Client 端的 VNC 操作流程都很简单. 只要求要一个 server 端的 IP 和他的密码就好.

来源:莫烦python

发布了33 篇原创文章 · 获赞 1 · 访问量 1226

猜你喜欢

转载自blog.csdn.net/weixin_44783002/article/details/105090494