使用SSH隧道和MetaMask使用远程以太坊节点

在本系列的第一部分中,我们学习了如何geth在私有虚拟服务器(VPS)上安装和同步以太坊块链的节点。在第二部分中,我们探索确保通过MetaMask远程访问此以太坊节点。我们还解释了如何确保一切都能在崩盘和停机中继续存在。

设置SSH隧道

设置什么?这是我之前提到的令人困惑的过程。我不会在这里详细介绍,但实际上它允许将对本地计算机的请求自动转移到另一台计算机。在这种情况下,VPS运行您的geth节点。我们将在以后创建MetaMask时理解为什么需要它。

获取VPS的IP地址

要将请求转移到您的VPS,您需要知道其IP地址。这是通过返回您的Linode仪表板并转到左侧的Linodes选项卡来确定的。您的节点的IP地址应该显示在您的VPS的地理位置正下方。它看起来是这样的:172.16.389.54。记下这个IP地址; 我们很快就会用到它。

Windows上的SSH

自2018年4月更新以来,OpenSSH默认安装在Windows 10上。这提供了ssh.exe以及其他几个SSH实用程序。为了在编写本文时检查Windows上的SSH状态,我从Windows 10下载了最新的ISO并将其安装在虚拟机上。OpenSSH已经安装并可以从中获得cmd.exe。如果您安装了Windows 10但未安装OpenSSH,请按照此Microsoft文章中的说明进行操作。如果您使用的是旧版本的Windows,则有几个可用的实用程序将提供SSH功能。

启动隧道

假设您具有对ssh客户端的命令行访问权限,我们从那里开始。以下命令用于配置SSH隧道。这个命令在所有三个平台上都是相同的。

ssh -N -v utilisateur@172.16.389.54 -L 8545: hôte local: 8545

-N开关表示 ssh不执行远程命令。我们想要一个连续的连接或隧道到我们的节点。此时无法远程执行任何命令。所述-v开关被ssh显示在执行过程中的日志信息。然后,我们提供用户名和IP地址以连接到我们的VPS。其余部分配置隧道本身,指定本地计算机8545在端口上接收的所有内容(节点侦听RPC请求的端口)必须在隧道中安全地传输到节点上的同一端口。这是最重要的一点:除了你,没有人能做到。由于暴露的RPC端口,您的节点不会受到攻击。

这是所有隧道混乱中最容易的部分。我猜你离开了SSH隧道,你可以看到它的日志输出。在浏览器中,单击浏览器窗口右上角的foxhead激活MetaMask。在MetaMask窗口的顶部是当前选择的以太坊网络。如果您使用的是测试版的应用程序,那很可能是Rinkeby Test Network。单击此名称,您将看到一个下拉菜单。顶部是以太坊主网络。这是我们的最终目的地,但我们不想使用此菜单项。如果这样做,MetaMask将连接到Infura节点,取消长途旅行的目的。你看,在列表的下方Localhost 8545。单击它以观察SSH隧道的退出。您应该看到这些行看起来像这样:

debug1: connexion au port 8545 transmettant au port localhost 8545 demandé.debug1: channel 1: new [direct-tcpip]

MetaMask现在应该在顶部有Localhost 8545,你应该在中间看到DepotSend按钮。如果是这样,您现在已将远程控制geth节点连接到MetaMask,尽管MetaMask认为它已连接到您的本地计算机。

使永久永久

您现在拥有一个功能齐全的geth节点,并且能够通过MetaMask和SSH隧道远程安全地连接。恭喜当然,计算机出现故障或被故意停止。为了避免在重新启动重新配置的一切,我们必须做两两件事:第一,我们设置geth节点上SMV和两个自动启动,不知何故做SSH隧道在同一我们的机器上本地。

远程持久性

相对而言,这是永久性过程中最容易的部分。我们不应对一个单一的操作系统,Linux的,并已建立自动启动任务的方式systemd。抛开Linux政策,让我们开始吧。

systemd在大多数Linux系统上管理进程,Ubuntu也不例外。为此,他读取.un service文件。让我们的geth节点在启动时自动启动,我们必须提供一个geth.service文件。从Linodes选项卡超越并启动控制台。如果您的geth节点仍在运行,则必须将其关闭。和以前一样,键入以下内容以重新连接到您的geth节点:

$tmux attach -t 0

停止你的geth结 ctrl-c。再次,等到您处于命令提示符,然后点击ctrl-d退出tmux。键入命令行下面,用utilisateur在 Utilisateur = utilisateur您先前提供的用户名:

$cat> geth.service << EOF
[Unit]
Description = Aller client Ethereum
[Service]
Utilisateur = utilisateur
Type = simple
Redémarrer = toujours
ExecStart = / usr / bin / geth --rpc --rpcaddr localhost --rpcport 8545
[Install]
WantedBy = default.target
EOF

这将geth.service在当前目录中创建一个文件。你必须做一些事情才能使它在systemd以下地方可用:

$sudo mv geth.service / etc / systemd / system /
$sudo systemctl daemon-reload
$sudo systemctl enable geth.service
$sudo systemctl start geth.service

要检查服务的状态,请使用以下命令:

$sudo systemctl status geth.service

在出口开始附近的某个地方你会看到actif (en cours d'exécution)。如果您不这样做,下面会有错误消息。祝你好运要查看连续输出geth,请键入以下内容:

$sudo journalctl -f -u geth.service

如果一切顺利,您将看到包含新导入的字符串段的行流。键入ctrl-c 以停止输出。别担心,它不会阻止你的 geth结。他一直在显示 systemd退出记录。

从现在开始,当您的VPS由于某种原因geth重新启动时会自动重启。

当地的永久性

您已在计算机上成功启动SSH隧道,但只要关闭设备或将笔记本电脑置于待机状态,隧道就会断开连接并终止连接。这显然不是最理想的。必须启动终端会话并重新激活隧道有点乏味。问题是三个主要操作系统有三种不同的方式来配置持久性服务,例如我们的SSH隧道。

成对的SSH密钥

要使其中一项自动运行,您必须具有专用和公用SSH密钥。如果您经常 ssh在远程计算机上而不需要提供密码,则已经配置了。即便如此,您必须将公钥发送到正在运行的远程计算机。geth。有关如何操作的说明 – 以及如何在需要时首先生成SSH密钥对 – 这个Linode 或Atlassian 文章 很好地解释了这一点。这些文章已经很长并且非常技术性。使用SSH密钥进行搜索是一个众所周知的过程,因此不必在此重复这些说明。如果你可以输入:

$ssh utilisateur@172.16.389.54

提供您自己的用户名和遥控器的IP地址geth如果您已经登录而无需提供密码,那么您就可以开始使用了。如果不是这种情况,则以下解决方案都不起作用。

Linux的

创建永久SSH隧道的过程与我们的VPS系统上使用的过程类似。我们安装persistent.ssh.tunnel.service存档并配置服务的项目以从系统开始。除了必然不同的需求ExecStart线之外,唯一的主要区别是我们需要在此行之前添加一条指定轻微启动延迟的行,以确保在服务启动之前网络就绪。请记住,当然,替换utilisateurUtilisateur = utilisateur用自己的用户名和utilisateur@172.16.389.54你的远程系统和IP地址的用户名。

$cat> persistent.ssh.tunnel.service << EOF
[Unit]
Description = Tunnel SSH persistant
[Service]
Utilisateur = utilisateur
Type = simple
Redémarrer = toujours
ExecStartPre = / bin / sleep 10
ExecStart = / usr / bin / ssh -N -v utilisateur@172.16.389.54 -L 8545: localhost: 8545
[Install]
WantedBy = default.target
EOF

这将persistent.ssh.tunnel.service在当前目录中创建一个文件。和以前一样,您必须做一些事情才能使它可用systemd,这次是在您的本地系统上:

$sudo mv persistent.ssh.tunnel.service / etc / systemd / system /
$sudo systemctl daemon-reload
$sudo systemctl enable persistent.ssh.tunnel.service
$sudo systemctl start persistent.ssh.tunnel.service

要验证服务是否已成功启动,请键入以下内容:

$sudo systemctl status persistent.ssh.tunnel.service

MACOS

Apple的MacOS有自己的配置持久服务的方式launchctl。与systemdLinux 类似,您提供配置文件 – 这次是XML文档而不是INI文件 – 然后使用此XML文档安装和启用服务。首先,我们创建此文件,像往常一样提供我们的VPS for Windows的用户名和IP地址。utilisateur@172.16.389.54。此外,请在下方注明您的macOS用户名Nom d'utilisateur

$cat > com.persistent.ssh.tunnel.plist <"1.0" encoding="UTF-8"?>
"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
"1.0">

  Label
  <string>com.persistent.ssh.tunnelstring>
  UserName
  <string>userstring>
  StandardErrorPath
  <string>/tmp/persistent.ssh.tunnel.errstring>
  ProgramArguments
  
    <string>/usr/bin/sshstring>
    <string>-Nstring>
    <string>-vstring>
    <string>user@172.16.389.54string>
    <string>-Lstring>
    <string>8545:localhost:8545string>
  
  KeepAlive
  <true/>


EOF

创建 com.persistent.ssh.tunnel.plist 文件后,将其移动到launchctl预期驻留这些文件的位置 。最后,给他命令在系统中安装它并在后台启动该过程。

$sudo mv com.persistent.ssh.tunnel.plist /Library/LaunchDaemons/
$sudo launchctl load /Library/LaunchDaemons/com.persistent.ssh.tunnel.plist

在系统的任何用户可用的安装中安装.plistedrop / Bibliothèque / LaunchDaemons /; 它不依赖于您的连接以使隧道处于活动状态。

视窗

要在Windows中配置持久性服务,必须下载提供此功能的实用程序。我使用的是免费的,开源的和公共域的NSSM,所以你必须在继续之前安装它

以下步骤创建tunnel ssh persistant服务并设置各种参数,以便您可以使用它将MetaMask连接到您的geth节点。我已经提供了订单和答案,nssm以便更清晰。要执行这些命令,必须以Windows管理员身份启动终端会话。您可以通过打开“开始”菜单并键入来完成此操作cmd。这应该带有一个更好的匹配菜单与命令提示符下划线。在右侧选择以管理员身份运行。单击允许此应用程序进行更改。如果一切顺利,将打开一个带有命令提示符的黑色终端窗口。C: Windows system32>。请仔细键入以下命令,确保不要键入命令提示符确保每个命令都获得类似于此处提供的响应。用.utilisateur(保留.)和Windows登录密码替换Windows用户名mot de passe。同时在中指明您的用户名和远程控制geth节点的IP地址utilisateur@172.16.389.54

C:\Windows\system32>nssm install persistent-ssh-tunnel "C:\Windows\System32\OpenSSH\ssh.exe" "-N -v user@172.16.389.54 -L 8545:localhost:8545"
Service "persistent-ssh-tunnel" installed successfully!

C:\Windows\system32>nssm set persistent-ssh-tunnel ObjectName ".\user" "password"
Set parameter "ObjectName" for service "persistent-ssh-tunnel".

C:\Windows\system32>nssm set persistent-ssh-tunnel DisplayName "Persistent SSH Tunnel"
Set parameter "DisplayName" for service "persistent-ssh-tunnel".

C:\Windows\system32>nssm set persistent-ssh-tunnel Description "Establishes a persistent SSH tunnel between a remote server and the local computer."
Set parameter "Description" for service "persistent-ssh-tunnel".

C:\Windows\system32>nssm start persistent-ssh-tunnel
persistent-ssh-tunnel: START: The operation completed successfully.

持久的SSH隧道测试

假设一切顺利,您现在可以在后台运行Windows,Linux或macOS系统服务,并在每次本地计算机重新启动时启动。要测试它,请打开安装了MetaMask的浏览器,然后按照上面的说明操作。Metamask的配置。MetaMask应该重新连接到Localhost 8545,但这次,后台服务使用请求gethVPS的隧道。您不再需要考虑与远程以太坊节点建立连接。

结论

为了机会,我在这些文章中做了具体选择。例如,我选择为我们的以太坊节点使用VPS,甚至是特定的VPS提供程序。如上所述,它需要花钱。从项目中获得收入的应用程序开发人员应该考虑这条路线。另一方面,只是好奇并希望按照所描述的步骤进行操作的人可以设置VPS,按照教程,测试后学习所有要学习,关闭和删除的内容VPS。这只花费几美分:如果花了两个小时来完成本教程,假设16GB VPS Linode,你将损失24美分。

您也可以自由选择其他VPS提供商。Digital Ocean Droplets价格极具竞争力。这里的过程应该同样适用于液滴。来自亚马逊的AWS也是可能的。使用您自己的硬件可以节省每月的成本,但是这个过程会变得更加复杂,并且不适合针对中等技术人员的文章。

我做的另一个选择是使用Ubuntu Linux发行版作为我们系统的操作系统。geth节点。Ubuntu是最受欢迎的发行版之一,但我们会说,您可以选择许多其他Linux发行版。如果你对另一个演员更熟悉,你应该能够处理你选择和基于Ubuntu的上述说明之间的差异。

我为Windows选择了一个系统服务实用程序,提供了其他选择,并回顾了该操作系统的SSH方面。同样,如果我必须在所有平台上处理软件的所有方面,这些文章将会出现新的东西。我向那些想要更多细节的人道歉。如果您对这些事情有疑问,请发表评论。

这肯定是一段漫长的旅程。我知道一切都有点雄心勃勃,特别是那些技术水平较低的人。我希望您能够按照这些说明找到自己的远程以太坊节点,通过安全的SSH隧道与MetaMask连接。如果您对此过程有疑问或需要帮助,请在此处留言。我很乐意提供帮助。

原文:https://kauri.io/article/86aee595a3244883b5fef18be4df67dc/v1/utilisez-votre-noeud-ethereum-distant-en-utilisant-un-tunnel-ssh-et-metamask

提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢