我的主要目标是使远程连接到我的家用 PC 并具有类似远程桌面的功能成为可能。
什么软件组合可以满足以下五个要求?
我有五个主要限制:
它必须是安全的,以便 99.8% 确定只有我才能访问我的 PC。
本地 PC 监视器不得显示启动会话的屏幕图像。
有软件可以连接到 Windows 7 PC
它会在启动时启动,启动后不需要用户在主机上进行交互
帧率必须很高(~20-30)并且应该是高分辨率的(1280x1024)
更多问题:
VNC 是否足够快以满足要求 5?
是否可以使用基于密钥的身份验证或 2FA 来保护 VNC 服务器以满足要求 1?
我可以让我的 PC 自动使用 UPnP 进行必要的端口转发吗?
希望我能够清楚地解释自己,如果有不清楚的地方,抱歉。随时要求澄清。
Ava*_*der 10
必须做的第一件事是安装 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)
现在必须配置 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)
应该采取的第一步是为密钥创建文件夹。[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。这样它就会立即打印出问题所在。
下载PuTTY 便携版。然后只需导入密钥,启用 x11forwarding。设置您的端口和用户名。然后是 x 服务器位置。
下载适用于 Windows 的 Xming X 服务器。由于 Windows 默认没有 X 服务器,您需要下载一个。它也可以移植(至少应该如此)。在使用 PuTTY 连接到 ssh 服务器之前启动它。
应该采取的第一步是选择动态 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 它将更改)时,它不应在同一台机器上再次询问相同的问题。如果它绝对不继续,除非您可以再次验证它与服务器上的指纹密钥相同。
它现在应该可以正常连接了,也许会询问您的密钥的密码,但没有其他问题。
现在动态 DNS 和服务器已经设置,您希望从其他网络连接到您的 PC。然后您必须以某种方式打开路由器的设置并转发您在 sshd 配置文件中设置的端口。否则无法连接到PC,因为路由器会阻止它。这高度依赖于路由器的制造商,所以谷歌“端口转发”或“端口转发”。您也可以阅读手册。
如果有什么不清楚或错误,请告诉我。