作為長期從事資料科學相關工作的人,作者很喜歡便捷的工作環境,併為此探索出來一些小技巧。透過這些技巧,可以將日常一些重複性或者枯燥的簡單工作變得「自動化」,使計算機的工作環境更加友好。

選自yanaiela。github,作者:Yanai Elazar,機器之心編譯,參與:高璇、淑婷。

過去幾年裡,我一直從事資料科學/研究專案,本科就做了一些與這個行業相關的工作,現在是研究生在讀,也在做這方面的研究。作為一個喜歡便捷環境的人,我總是喜歡改進我的工作方式,將日常的枯燥過程變得「自動化」。在這篇文章中,我將描述如何使環境更便於使用。

我使用的設定包含以下元件:

個人電腦(Linux 發行版)

閘道器

遠端伺服器

如何讓計算機工作環境更便捷?幾行簡單的命令即可

由於我研究的專案計算量巨大,膝上型電腦無法負擔。因此,我需要這些機器輔助我。出於安全原因,遠端伺服器無法直接訪問,這意味著它們只能由閘道器機器訪問。

連線伺服器的基本方法是首先將 ssh 連線到閘道器,然後將 ssh 連線到伺服器,每次連線時都需要輸入使用者名稱和密碼。輸入一遍又一遍是相當麻煩的。現在我將介紹如何使用單個命令輕鬆連線到兩個伺服器。

充分利用 SSH

關於 SSH

SSH(Secure Shell)是一種安全協議,允許使用者控制他們連線的伺服器。使用 ssh 連線到遠端伺服器的常用方法是使用以下命令:ssh user@host,然後獲得一個密碼提示符。在這篇文章中,我不會詳細介紹 ssh 的工作原理,只是利用 ssh 基本的使用知識。

無需密碼即可連線

首先建立一個認證金鑰,並將公共金鑰傳輸到我們想連線的伺服器。我們從設定第一個連線開始——從膝上型電腦到閘道器。

我們將使用一個名為 ssh-copy 的小軟體。它為我們完成所有工作,我們需要做的就是在終端中鍵入以下命令:

ssh-keygen -t rsa # create an SSH key, if needed。

ssh-copy-id -i ~/。ssh/id_rsa。pub user@host

Linux 使用者應該已經安裝了這個軟體。

Mac 使用者需要透過命令 brew install ssh-copy-id 安裝 ssh-copy 工具。

ssh-copy-id 命令將 SSH 金鑰複製到伺服器,如果需要,建立相應的 ssh 資料夾,最後將公鑰作為授權金鑰新增到伺服器的。ssh / authorized_keys 檔案中。

如果由於某種原因這不起作用,只需複製貼上以下命令,這基本就是 ssh-copy 的作用:

開啟終端並執行以下步驟:

生成一對認證金鑰。系統將要求你輸入任意密碼。ssh-keygen -t rsa

在遠端計算機上建立一個 。ssh 資料夾(如果已存在則無需建立)ssh user@host mkdir -p 。ssh

將之前生成的公鑰新增到遠端計算機(這應該是最後一次輸入密碼)。cat 。ssh/id_rsa。pub | ssh user@host ‘cat >> 。ssh/authorized_keys’

OK!從現在開始,你無需密碼即可輕鬆訪問伺服器。

ssh user@host

要從閘道器連線伺服器,遵循相同的步驟(如果尚未配置)。

方便的 SSH

現在要做的是進階版。與每次 ssh 都使用完整主機名+使用者名稱不同,我們可以使它更方便——無論是閘道器或代理機器。

在本地計算機的~/。ssh/config 檔案下插入以下內容:

Host gate

HostName [gateway。name]

User [user]

Host work1

HostName [machine。name]

user [user]

ProxyCommand ssh gate nc %h %p

還有一個有用的配置引數名為「IdentityFile」,它在處理多個公鑰/私鑰對時非常有用。假設你除了個人賬戶外,有一個 github 的工作帳戶。那你就需要另一個公鑰-私鑰對,但你還是需要一個方便的介面。以下是在配置檔案中進行設定的示例:

Host company-github

User git

HostName company。github。com

IdentityFile ~/。ssh/github。comp。key

每個 ssh 連線將使用匹配的金鑰進行連線。

為了使每個伺服器輕鬆連線,我們可以以類似的方式新增所有遠端伺服器。

現在,只需要簡單的命令 ssh gate 或 ssh work1,就可以直接連線到閘道器或 work1 伺服器,無需任何密碼或其它連線。

隧道(Tunneling)

如何讓計算機工作環境更便捷?幾行簡單的命令即可

現在我們可以方便地訪問遠端伺服器,然後可以使用隧道來實現對計算機中伺服器資源的無縫訪問。這樣,我們可以在遠端機器(具有大量記憶體)上執行 Jupyter notebook,並在瀏覽器上與它進行互動。它可以實現如下功能:

關閉計算機,並保持 notebook 在伺服器上執行。

從另一臺計算機也可以開啟和訪問同一 notebook。

保持模型可在遠端伺服器上載入。即載入一次即可永久訪問(或直到管理員重啟)。

例如,如果我們想在埠 9100 上開啟伺服器 work1 上的 notebook,可以使用以下命令開啟到埠 9200 上的計算機的隧道:

*ssh* *-N* *-f* *-L* *localhost*:9200:localhost:9100 *work1*

有趣的隧道

現在你已經瞭解如何設定隧道,你可以一直使用這個技巧(至少我一直這樣做)。現在以 Jupyter notebook 和 Tensorboard 為例做一個演示。Tensorboard 伺服器不會消耗很多資源,但 notebooks 有時會。由於不同的專案使用的機器不同(為平衡負載),因此會使用不同的隧道,所以我有時不記得哪個埠用於什麼應用,更不用說在哪個伺服器上了。

最終,我們轉向自己的機器,唯一控制的變數是埠號,而這些數字很快會被遺忘。我最近找到了一部分解決方案。我沒有在 localhost:xxxx 上開啟應用程式,而是生成了新的域名,這些域名只轉發到 localhost 主機。這雖然沒有解決埠問題,但現在每個應用程式都有自己的名稱,沒有混淆,在使用一兩次後,現代瀏覽器就會記住埠,所以你只需記住你為每個程式起的名稱即可。

要進行域轉發,請執行以下操作:

使用 sudo [vim|nano|。。。] /etc/hosts 開啟/etc/hosts 檔案

你應該在某處(可能在頂部)發現這一行:127。0。0。1 localhost

複製該行,使用你為應用程式取的名字替換 localhost 的名稱(例如,tensorboard)。

現在你可以在 tensorboard:8100 上找到 tensorboard 應用。

但埠問題仍然沒有解決,歡迎提出建議。

更多便捷技巧

保持 SSH 開啟

如果你已經使用隧道一段時間,你可能發現如果閒置幾分鐘後,隧道往往在不工作時都會斷開連線。如果你同時在處理好幾件事,而沒有一直使用隧道,那這個重複連線的工作真的很煩人。透過在 ssh 配置檔案中新增一行簡單語句,這個問題就可以很容易解決。這樣,每隔 x 秒,一個‘喚醒(sign-of-life)’訊號會被髮送到伺服器上。在本地計算機上,編輯 /etc/ssh/ssh_config 檔案(帶有 sudo)並在 Host *行後輸入以下行:

ServerAliveInterval 120

這適用於所有 ssh 連線。如果不想所有的 ssh 都保持連線,則可以透過給~/。ssh/config 配置檔案新增相同的行來僅連線特定的 ssh。配置如下:

Host gate

HostName gateway。name

User user

IdentityFile ~/。ssh/gateway

ServerAliveInterval 120

Autossh

現在,隧道在不工作時也不會關閉,事情看起來很順利。但當你準備睡覺(人總要休息啊)時,你就會暫停/休眠你的電腦(不是關機)。第二天,你想重新開始工作,你在本地計算機上準備開啟隧道時發現,…… 連線已關閉,你需要重新開啟它。這也讓人心累不是嗎?幸運的是,這也有解決方案!

關於 autossh:

http://www。

harding。motd。ca/autossh

/

這個絕妙的程式將保證你的 ssh 連線一直開啟,除非關閉計算機。只要沒有關機,ssh 就一直是連線著的。例如,你可以將計算機置於休眠狀態,斷開 Wifi 等連線,但一旦重新聯機,此程式將重新為你連線 ssh。

透過執行以下行來安裝 autossh:

sudo apt-*get* install autossh

現在執行以下命令:

*autossh* *-M* 20000 *-N* *-f* *-L* *localhost*:9201:localhost:9100 *work1*

這與我們之前看到的命令非常相似,除了命令名稱(duh)和 -M 20000 標誌(這是顯示器所在的埠)。

IntelliJ 整合

在 Pycharm 專業版中,有一個很好的功能,即可以連線遠端伺服器並直接在上面工作。你可以在自己的計算機上編寫程式碼,在遠端伺服器上執行程式碼,或者在遠端伺服器上完全同步整個儲存庫。

interlliJ 介面會不時變化,但主題不變。我將介紹特定版本 - V。 2018。1。4 的步驟。

進入 Pycharm 的設定介面

構建,執行,部署 - >部署

單擊綠色+,建立新的部署設定

輸入相關資訊(名稱、主機、埠(通常為 22)、根路徑和使用者名稱)

現在右鍵點選專案資料夾,在部署鍵下,你可以上傳、下載專案或使其與遠端位置同步(可以設定快捷鍵)。

使用遠端直譯器:

進入專案設定欄

在專案直譯器標記下(在專案直譯器選項附近,有一個小齒輪按鈕)。單擊它,然後點選「新增」。

在左側選單中,單擊 SSH 直譯器

單擊「現有伺服器配置」選項,使用我們之前建立的部署配置。

選擇遠端直譯器(例如 anaconda / python)

。。。 全部完成!

如何讓計算機工作環境更便捷?幾行簡單的命令即可

原文連結:

https://

yanaiela。github。io/post

/remote-servers/