作为一个长期从事数据科学相关工作的人,笔者非常喜欢便利的工作环境,并为此探索了一些小技巧。通过这些技术,可以将一些重复或枯燥的简单日常工作“自动化”,使计算机的工作环境更加友好。过去几年我一直从事数据科学/研究项目,在本科时做一些与行业相关的工作,现在作为研究生在这方面做研究。作为一个喜欢便利环境的人,我总是喜欢改进自己的工作方式,将日常枯燥的工作“自动化”。在本文中,我描述了如何使环境更易于使用。我正在使用的设置包括以下组件:PC(Linux发行版)网关远程服务器由于我正在处理的项目的计算密集型性质,我的笔记本电脑负担不起。因此,我需要这些机器来协助我。出于安全原因,不能直接访问远程服务器,这意味着它们只能由网关机器访问。连接服务器的基本方式是先ssh到网关,再ssh到服务器,每次连接都需要用户名和密码。一遍又一遍地输入它非常麻烦。现在我将描述如何使用一个命令轻松连接到两个服务器。充分利用SSH关于SSSHSSSH是一种安全协议,允许用户控制他们连接的服务器。使用ssh连接到远程服务器的常用方法是使用以下命令:sshuser@host并获得密码提示。在本文中,我不会详细介绍ssh的工作原理,而只是使用ssh的基本使用知识。无密码连接首先创建一个身份验证密钥并将公钥传输到我们要连接的服务器。我们首先设置连接-从笔记本电脑到网关。我们将使用一个名为ssh-copy的小软件。它为我们完成所有工作,我们需要做的就是在终端中键入以下命令:ssh-keygen-trsa#createanSSHkey,ifneeded.ssh-copy-id-i~/.ssh/id_rsa.pubuser@hostLinux用户应该已经安装了此软件。Mac用户需要通过命令brewinstallssh-copy-id安装ssh-copy工具。ssh-copy-id命令将SSH密钥复制到服务器,根据需要创建相应的文件夹,并将公钥作为授权密钥添加到服务器的.ssh/authorized_keys文件中。如果出于某种原因这不起作用,只需复制粘贴以下命令,这基本上就是ssh-copy所做的:打开终端并运行以下步骤:生成一对身份验证密钥。您将被要求输入任意密码。ssh-keygen-trsa在远程机器上创建一个文件夹(如果已经存在则不需要创建)sshuser@hostmkdir-p.ssh将之前生成的公钥添加到远程机器上。猫.ssh/id_rsa.pub|sshuser@host'cat>>.ssh/authorized_keys'好!从现在开始,您无需密码即可轻松访问服务器。sshuser@host要从网关连接到服务器,请执行相同的步骤(如果尚未配置)。方便的SSH现在做的是进阶版。不用每次ssh时都使用完整的主机名+用户名,我们可以让它更方便——无论是网关还是代理机器。在本地计算机上的~/.ssh/config文件下插入以下内容:HostgateHostName[gateway.name]User[user]Hostwork1HostName[machine.name]user[user]ProxyCommandsshgatenc%h%p还有一个有用的配置参数称为“IdentityFile”,在处理多个公钥/私钥对时很有用。假设除了您的个人帐户外,您还有一个github工作帐户。然后你需要另一个公私密钥对,但你仍然需要一个方便的接口。这是在配置文件中设置它的示例:Hostcompany-githubUsergitHostNamecompany.github.comIdentityFile~/.ssh/github.comp.key每个ssh连接将使用匹配的密钥进行连接。为了方便每个服务器连接,我们可以用类似的方式添加所有远程服务器。现在,使用简单的命令sshgate或sshwork1,您可以直接连接到网关或work1服务器,无需任何密码或其他连接。隧道(Tunneling)现在我们可以方便地访问远程服务器,然后我们就可以利用隧道来实现对计算机中服务器资源的无缝访问。这样,我们就可以在远程机器(具有大量内存)上运行Jupyternotebook,并在浏览器上与之交互。它可以实现以下功能:关闭电脑,保持笔记本在服务器上运行。也可以从另一台计算机打开和访问同一笔记本。保持模型在远程服务器上可加载。即加载一次并可访问(或直到管理员重新启动)。例如,如果我们想在服务器work1的9100端口上打开笔记本,我们可以使用以下命令在端口9200上打开到计算机的隧道:*ssh**-N**-f**-L**localhost*:9200:localhost:9100*work1*有趣的隧道现在您知道如何设置隧道,您可以随时使用这个技巧(至少我总是这样做)。现以Jupyternotebook和Tensorboard为例进行演示。Tensorboard服务器不会消耗很多资源,但笔记本有时会消耗很多资源。由于不同的项目使用不同的机器(用于负载平衡)并因此使用不同的隧道,所以我有时不记得哪个端口用于哪个应用程序,更不用说在哪个服务器上了。最终,我们转移到我们自己的机器上,控制变量是端口号,这些数字很快就被遗忘了。我最近找到了部分解决方案。我没有在localhost:xxxx上打开应用程序,而是生成仅转发到localhost主机的新域名。虽然这并没有解决移植问题,但现在每个应用程序都有自己的名称,不会混淆,并且在使用一两次之后,现代浏览器会记住端口,所以你只需要记住你正在为每个应用程序调用端口应用程序。的名称。要进行域转发:使用sudo[vim|nano|...]打开/etc/hosts文件/etc/hosts您应该在某处(可能在顶部)找到这一行:127.0.0.1localhost复制在这一行中,替换localhost的名称与您为应用程序提供的名称(例如,tensorboard)。现在您可以在tensorboard:8100上找到tensorboard应用程序。但是端口问题还是没有解决,欢迎指教。使SSH保持打开状态的更多实用技巧如果您已经使用隧道一段时间,您可能会发现,如果隧道闲置几分钟,当它们不工作时,它们往往会断开连接。如果您同时做几件事并且不一直使用隧道,这种连接重复可能会非常烦人。通过在ssh配置文件中添加简单的一行,可以轻松解决此问题。这样,每隔x秒,就会向服务器发送一个“生命迹象”信号。在本地计算机上,编辑/etc/ssh/ssh_config文件(使用sudo)并在Host*行后输入以下行:ServerAliveInterval120这适用于所有ssh连接。如果您不希望所有ssh保持连接,您可以通过将相同的行添加到~/.ssh/config配置文件来仅连接特定的ssh。配置如下:HostgateHostNamegateway.nameUseruserIdentityFile~/.ssh/gatewayServerAliveInterval120Autossh现在隧道在不工作时不会关闭并且看起来很顺利。但是当你准备睡觉时(人们必须睡觉),你会暂停/休眠你的计算机(而不是关闭)。第二天,你想回去工作,你在本地计算机上正要打开隧道时发现,...连接已关??闭,你需要重新打开它。也很累不是吗?幸运的是,也有解决方案!关于autossh:http://www.harding.motd.ca/autossh/这个漂亮的程序将使您的ssh连接保持打开状态,除非您关闭计算机。只要不关机,ssh一直连接着。例如,您可以让您的计算机进入睡眠状态、断开Wifi连接等,但是一旦恢复在线,该程序将为您重新连接ssh。通过运行以下行安装autossh:sudoapt-*get*installautossh现在运行以下命令:*autossh**-M*20000*-N**-f**-L**localhost*:9201:localhost:9100*work1*这与我们之前看到的命令非常相似,除了命令名称(duh)和-M20000标志(这是监视器所在的端口)。IntelliJ集成在Pycharm专业版中,它有一个很好的功能,你可以连接到远程服务器并直接在上面工作。您可以在自己的计算机上编写代码,在远程服务器上运行它,或者在远程服务器上完全同步您的整个存储库。interlliJ界面会不时更改,但主题保持不变。我将描述特定版本的步骤-V.2018.1.4。进入Pycharm的设置界面Build,Execute,Deploy->Deploy点击绿色+新建部署设置输入相关信息(名称、主机、端口(一般为22)、根路径和用户名)现在右击项目文件夹,在Deployment键下,可以上传、下载或同步项目到远程位置(可以设置快捷键)。要使用远程解释器:转到项目解释器选项卡下的项目设置栏(在项目解释器选项附近,有一个小齿轮按钮)。单击它,然后单击添加。在左侧菜单中,单击SSHInterpreter单击ExistingServerConfiguration选项以使用我们之前创建的部署配置。选择远程解释器(例如anaconda/python)...全部完成
