安全地远程控制我的电脑

Ava*_*der 2 ssh 15.10

我的主要目标是使远程连接到我的家用 PC 并具有类似远程桌面的功能成为可能。

什么软件组合可以满足以下五个要求?


我有五个主要限制:

  1. 它必须是安全的,以便 99.8% 确定只有我才能访问我的 PC。

  2. 本地 PC 监视器不得显示启动会话的屏幕图像。

  3. 有软件可以连接到 Windows 7 PC

  4. 它会在启动时启动,启动后不需要用户在主机上进行交互

  5. 帧率必须很高(~20-30)并且应该是高分辨率的(1280x1024)


更多问题:

VNC 是否足够快以满足要求 5?

是否可以使用基于密钥的身份验证或 2FA 来保护 VNC 服务器以满足要求 1?

我可以让我的 PC 自动使用 UPnP 进行必要的端口转发吗?


希望我能够清楚地解释自己,如果有不清楚的地方,抱歉。随时要求澄清。

Ava*_*der 10

1.安装SSH

必须做的第一件事是安装 SSH(安全外壳协议)服务器。对于 ubuntu,它就像编写一个命令一样简单。只需复制粘贴以下命令即可安装服务器。

sudo apt install openssh-server
Run Code Online (Sandbox Code Playgroud)

如果它存在,它可能是一个好主意

sudo apt purge openssh-server
Run Code Online (Sandbox Code Playgroud)

之前并重新安装以避免安装出现任何问题。

如果您想测试您的服务器是否工作,另一个好主意可能是安装客户端。

sudo apt install openssh-client
Run Code Online (Sandbox Code Playgroud)

2.配置SSH服务器

现在必须配置 SSH 以启用基于密钥的身份验证以提高安全性。作为这里的第一步,应该备份原始配置,但如果您确定不会搞砸,则可以跳过这部分。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo chmod a-w /etc/ssh/sshd_config.bak
Run Code Online (Sandbox Code Playgroud)

现在您可以使用文本编辑器来编辑配置文件。例如,您可以使用 gedit、nano 或 vim 作为编辑器。

sudo <TEXT EDITOR HERE> /etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)

现在您已经打开了配置文件。应该做的第一件事是更改端口。通常建议更改 SSH 服务器的端口以将其隐藏一点。它还可以阻止大多数机器人尝试进入您的机器。

更改端口

Port <Port number>
Run Code Online (Sandbox Code Playgroud)

将其更改为例如

Port 2213
Run Code Online (Sandbox Code Playgroud)

要启用 X11 转发(远程显示您的 PC 屏幕)更改。

X11Forwarding <Value>
Run Code Online (Sandbox Code Playgroud)

X11Forwarding yes
Run Code Online (Sandbox Code Playgroud)

现在运行此命令以重新启动服务器(以应用配置更改。

sudo systemctl restart sshd
Run Code Online (Sandbox Code Playgroud)

让我们检查一下状态。它必须是绿色的“活动(正在运行)”。

sudo systemctl status sshd -l
Run Code Online (Sandbox Code Playgroud)

现在尝试使用此命令连接到您的 ssh 服务器。

ssh -p <Port number> <Username>@localhost
Run Code Online (Sandbox Code Playgroud)

3. 设置 RSA 密钥

应该采取的第一步是为密钥创建文件夹。[1]

mkdir ~/.ssh
Run Code Online (Sandbox Code Playgroud)

现在让我们生成密钥。按照说明操作。

ssh-keygen
Run Code Online (Sandbox Code Playgroud)

加密家园

如果您有一个加密的主目录,SSH 将无法访问您的 authorized_keys 文件,因为它位于您的加密主目录中,并且在您通过身份验证之后才可用。因此,SSH 将默认为密码认证。

要解决此问题,请在您家外创建一个名为

sudo mkdir /etc/ssh/<username>
Run Code Online (Sandbox Code Playgroud)

此目录必须具有 755 权限并归用户所有。将authorized_keys 文件移动到其中。authorized_keys 文件必须具有 644 权限并且归用户所有。

然后编辑您的 /etc/ssh/sshd_config 并添加:

AuthorizedKeysFile    /etc/ssh/%u/authorized_keys
Run Code Online (Sandbox Code Playgroud)

生成密钥后,我们将其复制到主机。

ssh-copy-id -p <Port number> <User name>@<Host (localhost)>
Run Code Online (Sandbox Code Playgroud)

完成后。必须设置对密钥和文件夹的正确权限以保护它。

chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
(If you have encrypted home look at that section's folder permissions)
Run Code Online (Sandbox Code Playgroud)

如果权限错误,您很可能会遇到错误。(来源:Ubuntu Wiki


现在为了最终确保身份验证,找到这些行。

RSAAuthentication <Value>
PubkeyAuthentication <Value>
PasswordAuthentication <Value>
ChallengeResponseAuthentication <Value>
Run Code Online (Sandbox Code Playgroud)

将它们更改为。

RSAAuthentication no
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
Run Code Online (Sandbox Code Playgroud)

< 可选> 还将以下这些行添加/编辑到您的配置文件中,以进一步保护(“强化”)您的系统。在此处或从 sshd 的手册页阅读有关这些行的更多信息。

TCPKeepAlive no
ClientAliveInterval 60
ClientAliveCountMax 5
UsePrivilegeSeparation yes
PermitEmptyPasswords no
PermitRootLogin no
UseLogin no
UsePAM no
MaxAuthTries 2
Run Code Online (Sandbox Code Playgroud)

如果客户端请求,则允许使用压缩。使用客户端中的压缩标志来节省带宽(是)或 CPU(否)。

Compression yes
Run Code Online (Sandbox Code Playgroud)

</可选>

完成安装

现在运行此命令以重新启动服务器(以应用配置更改。

sudo systemctl restart sshd
Run Code Online (Sandbox Code Playgroud)

让我们检查状态

sudo systemctl status sshd -l
Run Code Online (Sandbox Code Playgroud)

确保它是绿色的并且是“活动的(正在运行)”。如果不是,则需要检查错误消息。如果一切正常,请尝试使用此命令连接到 ssh 服务器。

ssh -p <Port number> <Username>@localhost
Run Code Online (Sandbox Code Playgroud)

如果失败,则通过启用调试的命令行启动 sshd。这样它就会立即打印出问题所在。

4.为X11转发设置一个便携式U盘

下载PuTTY 便携版。然后只需导入密钥,启用 x11forwarding。设置您的端口和用户名。然后是 x 服务器位置。

下载适用于 Windows 的 Xming X 服务器。由于 Windows 默认没有 X 服务器,您需要下载一个。它也可以移植(至少应该如此)。在使用 PuTTY 连接到 ssh 服务器之前启动它。

5.设置动态DNS。

应该采取的第一步是选择动态 dns 提供商,我自己选择了 dynu.com。现在让我们安装所需的软件。为此,将此命令复制粘贴到您的终端。这次我们将使用 ddclient。

sudo apt install ddclient
Run Code Online (Sandbox Code Playgroud)

它将启动一个配置屏幕,跳过它,让我们自己编辑配置文件。(像以前一样使用 nano,gedit 任何你想编辑的文件)

sudo <your text editor> /etc/ddclient.conf
Run Code Online (Sandbox Code Playgroud)

现在让我们从这里复制内容。

# ddclient configuration for Dynu
#
# /etc/ddclient.conf
daemon=60                                                    # Check every 60 seconds.
syslog=yes                                                   # Log update msgs to syslog.
mail=root                                                    # Mail all msgs to root.
mail-failure=root                                            # Mail failed update msgs to root.
pid=/var/run/ddclient.pid                                    # Record PID in file.
ssl=yes                                                      # Use ssl-support.  Works with ssl-library .
use=web, web=my.ip.fi/                                              # Get ip from hardware interface.
server=api.dynu.com                                          # IP update server.
protocol=dyndns2                        
login=YOURUSERNAME                                             # Your username.
password=YOURPASSWORD                                        # Your password or MD5 of password.
MYDOMAIN.DYNU.COM                                            # List one or more hostnames one on each line.
Run Code Online (Sandbox Code Playgroud)

编辑网络接口、主机名、用户名和密码行以使其正常工作。您还需要有 IO::Socket::SSL。您可以使用此命令安装它。

sudo apt install libio-socket-ssl-perl
Run Code Online (Sandbox Code Playgroud)

现在让我们设置 ddclient 在后台运行。[2]

sudo <your text editor> /etc/default/ddclient
Run Code Online (Sandbox Code Playgroud)

找到说的那几行

run_dhclient=<value>
run_ipup=<value>
run_daemon=<value>
Run Code Online (Sandbox Code Playgroud)

将它们更改为

run_dhclient="false"
run_ipup="false"
run_daemon="true"
Run Code Online (Sandbox Code Playgroud)

现在让我们开始吧

sudo systemctl start ddclient
Run Code Online (Sandbox Code Playgroud)

让我们检查它是否正常工作

sudo systemctl status -l ddclient
Run Code Online (Sandbox Code Playgroud)

确保它是绿色的(“Active = active(running)”)

现在应该设置动态 DNS。你现在可以用

ssh -p <Port number> <Username>@<Hostname (your dynamic DNS one)>
Run Code Online (Sandbox Code Playgroud)

应该说

The authenticity of host '[<Dynamic DNS hostname>]:<Port> ([<Your IP address>]:<Port>)' can't be established.
Run Code Online (Sandbox Code Playgroud)

它还会打印 ECDSA 密钥指纹,您可以使用

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
Run Code Online (Sandbox Code Playgroud)

验证指纹是否相同,然后写“是”继续。注意!当您尚未清除已知主机文件且 IP 未更改(如果您使用动态 DNS 它将更改)时,它不应在同一台机器上再次询问相同的问题。如果它绝对不继续,除非您可以再次验证它与服务器上的指纹密钥相同。

它现在应该可以正常连接了,也许会询问您的密钥的密码,但没有其他问题。

6. 端口转发

现在动态 DNS 和服务器已经设置,您希望从其他网络连接到您的 PC。然后您必须以某种方式打开路由器的设置并转发您在 sshd 配置文件中设置的端口。否则无法连接到PC,因为路由器会阻止它。这高度依赖于路由器的制造商,所以谷歌“端口转发”或“端口转发”。您也可以阅读手册。


如果有什么不清楚或错误,请告诉我。