设置 SSH

为了让你的计算机与你的数据处理机器通信,你需要在其上安装 SSH。打开你的固定计算机上的终端然后输入以下代码进行安装:

sudo apt-get install ssh

启用 SSH X11 转发让你可以进行绘图(plot),首先如下打开配置文件:

sudo gedit /etc/ssh/sshd_config

然后找到注释行:

# X11Forwarding yes

移除前面的 # 号,然后保存并关闭该文件。



设置 SSH

通过执行下列代码生成一组 SSH 密钥对,然后继续参考该指南(如果你之前没有经验):

ssh-keygen -t rsa

现在将该密钥复制到你的远程机器,这样你以后连接它时就不用每次都输入密码了。第一次连接的时候你需要使用你远程机器的密码进行认证:

ssh-copy-id [remote username here]@[remote Ip here]

通过将以下代码附加到你本地机器上的 config 文件来启用压缩和 X11 转发(对数据绘图有用):

echo 'ForwardX11 yes' >> ~/.ssh/config

echo 'Compression yes' >> ~/.ssh/config

用你的笔记本连接你的运程机器,检查一下结果:

ssh [remote username here]@[remote Ip here]

现在还登录着,你应该禁用你的远程机器上的密码登录(为了安全)。使用你最喜欢的命令行编辑器打开配置文件:

sudo vim /etc/ssh/sshd_config

然后取消以下 # 行的注释:

PasswordAuthentication no

在你登录着你的远程机器时重启你的 SSH 服务器(你必须重新验证一次):

service ssh restart

 在你用 SSH 登录着你的远程机器时,你应该要做的最后一件事是找到你的显示器环境变量。后面我们将会用其来 plotting,我通常得到的是 localhost:10.0.

echo $DISPLAY

> localhost:10.0

记住这个命令的输出,后面会用到。

PyCharm 中的远程解释器



PyCharm 中的远程解释器

python ssh password 写变量 ssh pycharm_Test

这部分很有意思,我们如何设置远程解释器(remote interpreter)从而让你能在远程机器上执行脚本呢?首先启动 PyCharm,然后新建一个 Python 项目。

解释器(Interpreter)

打开 Preferences > Project > Project Interpreter,点击右上角的加点按钮,然后点击 Add remote。

python ssh password 写变量 ssh pycharm_Python_02

点击 SSH Credentials 按钮然后输入你的信息。选择 Auth Type 上的 Key pair,然后选择 Private Key file。其路径应该是 /Users//.ssh/id_rsa

python ssh password 写变量 ssh pycharm_Deployment_03

点击 OK > Apply。注意 Project Interpreter 上的 R 表示远程。

python ssh password 写变量 ssh pycharm_Deployment_04

部署

该远程解释器不能执行本地的文件,PyCharm 必须将你的源文件(你的项目)复制到你的远程服务器上的目标文件夹,但这是自动完成的,所以你无需多想!当你在 Preferences 面板时,打开 Build, Execution, Deployment > Deployment > Options,确保勾选了 Create empty directories。这样当你创建文件夹时,PyCharm 就会自动同步:

python ssh password 写变量 ssh pycharm_Test_05

现在回到 Build, Execution, Deployment > Deployment,然后点击 + 按钮,选择 SFTP 并为你的远程命名。点击 OK:

python ssh password 写变量 ssh pycharm_Python_06

在 SFTP host 中首次输入你的远程机器的 IP 来设置连接,然后选择 Auth type 上的 Key pair,最后选择 Private Key file,路径应该是 /Users//.ssh/id_rsa,如截图所示。然后你可能需要点击 Test SFTP connection 进行测试。如果你连接成功了,就应该设置 mapping 了。如果你愿意,你可以点击 Rooth path 旁边的 Autodetect,然后它会自动寻找你的远程机器上的主目录。在此之后你所特定的所有路径都将相对于该主路径。然后转到 Mappings 标签。

python ssh password 写变量 ssh pycharm_Deployment_07

一旦你在你的本地路径中保存或创建了一个文件,它就将会被复制到远程机器上的 Deployment path,也许你想将其部署到如下所示的 DeployedProjects/ 文件夹。这是相对于你前面指定的 Rooth path,所以在我们的这个例子中,的部署路径是:/home/username/DeployedProjects/TestProject/

python ssh password 写变量 ssh pycharm_Python_08

现在我们完成了偏好设置,点击 Apply > OK,然后点击 Tools > Deployment > Automatic Upload,确认其被选择了:

python ssh password 写变量 ssh pycharm_Python_09

要进行初始上传,右击项目浏览器中的项目文件夹,然后点击 Upload to remote:

python ssh password 写变量 ssh pycharm_Test_10

在你的底部面板应该会出现一个 File transfer 标签,你可以查看进程:

python ssh password 写变量 ssh pycharm_Test_11

然后点击 Tools > Deployment > Browse Remote Host。将该窗口拖拽到左边 Project 标签下面。这样你就能轻松地在本地和远程项目之间切换了。

python ssh password 写变量 ssh pycharm_Python_12

一旦你保存并运行了一个文件后,这些部署设置将会无缝工作,它完成得非常快,你可能都无法察觉。

设置控制台

打开 Preferences > Build, Execution, Deployment > Console > Python console 然后选择 Python interpreter。然后点击 Dotted button 并输入所需的之间我们加入到 ~/.bashrc 中的环境变量。注意我们也给 DISPLAY 变量加了一个值,这个值是我们之前使用 SSH 连接服务器时找到的:

python ssh password 写变量 ssh pycharm_python_13

然后回到 Preferences > Build, Execution, Deployment > Console > Python console 然后选择 Always show the debug console。这在我们调试的时候非常有用:

python ssh password 写变量 ssh pycharm_Python_14

创建一个运行配置

在你的项目中创建一个简单的名为 test.py 的测试文件,其中仅包含:

import tensorflow

print "Tensorflow Imported"

现在进入 Run > Edit Configurations…,点击 + 按钮创建一个新的 Python 配置。为其命名后选择该脚本运行:

python ssh password 写变量 ssh pycharm_python_15

现在像之前一样进入所需的环境变量。小技巧:你可以直接从我们之前指定的控制台设置中直接复制它们,在左下角使用 Ctrl+A 和复制/粘贴即可。你可以通过点击 Environment variables 一行后面的加点按钮获取它们。

python ssh password 写变量 ssh pycharm_python_16

点击 OK > OK 开始测试!

测试该设置

现在我们应该全部完成了,改进行测试了。首先打开终端并确保你至少有一个带有 X 转发的 SSH 信道连接到你的服务器。如果你的连接已经开启了一段时间了,你可能必须退出并重启它们:

ssh [remote username here]@[remote Ip here]

控制台

然后打开 PyCharm 中底部栏的 Python Console 并输入 import tensorflow。然后你可以输入 ls/ 来验证你确实在你的服务器上执行该命令。输出应该是这样的:

python ssh password 写变量 ssh pycharm_Test_17

运行脚本

现在回到你的 test.py 脚本,然后选择顶部栏的 Run > Run…。选择你新建的运行配置 Test,其应该输出这样的结果:

python ssh password 写变量 ssh pycharm_Test_18

绘图

让我们做一些绘图,把你的 test.py 文件改成这样:

import tensorflow

import matplotlib

matplotlib.use('GTKAgg')

import matplotlib.pyplot as plt

import numpy as np

print "Tensorflow Imported"

plt.plot(np.arange(100))

plt.show()

接着用你的运行配置 Test 再一次运行它,你会得到这个图:

python ssh password 写变量 ssh pycharm_Deployment_19

这个图实际上在你的远程服务器上完成,但是窗口数据被转向到了你的本地机器。注意我们可以用 matplotlib.use('GTXAgg') 改变支持,因为它是一个支持 X11 的显示后台。你可以在这里阅读更多关于 Matplotlib 后台的信息:

http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

你也可以在 matplotlibrc 文件中修改默认行为。记住在一个分离开的终端中你需要至少一个开放的 SSH 连接,使用 DISPLAY 环境变量的正确值以使其工作。如果无效尝试重新启动你的 SSH 连接。

调试脚本

最后做一些调试。点击左侧栏以放一个断点(breakpoint),接着点击 Run > Debug…,并选择 Test 配置。你将会看到执行已停止,然后你就可以远程调试脚本了。

python ssh password 写变量 ssh pycharm_python_20

下一步

为了使你的机器联网,你不得不在家庭路由器上转发端口,这根据不同的供应商而变化。我建议在你的路由器上转发一个超过 22 的不同端口。世界上存在很多动机不良的 bot 想要攻击你,它们会检查默认端口,也许会减慢你的连接(尽管你已经关闭了口令认证,所以你相当安全)。也许你可以把你的路由器上的端口 4343 转发到 IP 192.168.0.1 上的端口 22(该教程中我们的远程默认 IP)。另外,为了加快绘图,你也许会需要更快的加密:

http://xmodulo.com/how-to-speed-up-x11-forwarding-in-ssh.html  


PyCharm 中的远程解释器

python ssh password 写变量 ssh pycharm_Test

这部分很有意思,我们如何设置远程解释器(remote interpreter)从而让你能在远程机器上执行脚本呢?首先启动 PyCharm,然后新建一个 Python 项目。

解释器(Interpreter)

打开 Preferences > Project > Project Interpreter,点击右上角的加点按钮,然后点击 Add remote。

python ssh password 写变量 ssh pycharm_Python_02

点击 SSH Credentials 按钮然后输入你的信息。选择 Auth Type 上的 Key pair,然后选择 Private Key file。其路径应该是 /Users//.ssh/id_rsa

python ssh password 写变量 ssh pycharm_Deployment_03

点击 OK > Apply。注意 Project Interpreter 上的 R 表示远程。

python ssh password 写变量 ssh pycharm_Deployment_04

部署

该远程解释器不能执行本地的文件,PyCharm 必须将你的源文件(你的项目)复制到你的远程服务器上的目标文件夹,但这是自动完成的,所以你无需多想!当你在 Preferences 面板时,打开 Build, Execution, Deployment > Deployment > Options,确保勾选了 Create empty directories。这样当你创建文件夹时,PyCharm 就会自动同步:

python ssh password 写变量 ssh pycharm_Test_05

现在回到 Build, Execution, Deployment > Deployment,然后点击 + 按钮,选择 SFTP 并为你的远程命名。点击 OK:

python ssh password 写变量 ssh pycharm_Python_06

在 SFTP host 中首次输入你的远程机器的 IP 来设置连接,然后选择 Auth type 上的 Key pair,最后选择 Private Key file,路径应该是 /Users//.ssh/id_rsa,如截图所示。然后你可能需要点击 Test SFTP connection 进行测试。如果你连接成功了,就应该设置 mapping 了。如果你愿意,你可以点击 Rooth path 旁边的 Autodetect,然后它会自动寻找你的远程机器上的主目录。在此之后你所特定的所有路径都将相对于该主路径。然后转到 Mappings 标签。

python ssh password 写变量 ssh pycharm_Deployment_07

一旦你在你的本地路径中保存或创建了一个文件,它就将会被复制到远程机器上的 Deployment path,也许你想将其部署到如下所示的 DeployedProjects/ 文件夹。这是相对于你前面指定的 Rooth path,所以在我们的这个例子中,的部署路径是:/home/username/DeployedProjects/TestProject/

python ssh password 写变量 ssh pycharm_Python_08

现在我们完成了偏好设置,点击 Apply > OK,然后点击 Tools > Deployment > Automatic Upload,确认其被选择了:

python ssh password 写变量 ssh pycharm_Python_09

要进行初始上传,右击项目浏览器中的项目文件夹,然后点击 Upload to remote:

python ssh password 写变量 ssh pycharm_Test_10

在你的底部面板应该会出现一个 File transfer 标签,你可以查看进程:

python ssh password 写变量 ssh pycharm_Test_11

然后点击 Tools > Deployment > Browse Remote Host。将该窗口拖拽到左边 Project 标签下面。这样你就能轻松地在本地和远程项目之间切换了。

python ssh password 写变量 ssh pycharm_Python_12

一旦你保存并运行了一个文件后,这些部署设置将会无缝工作,它完成得非常快,你可能都无法察觉。

设置控制台

打开 Preferences > Build, Execution, Deployment > Console > Python console 然后选择 Python interpreter。然后点击 Dotted button 并输入所需的之间我们加入到 ~/.bashrc 中的环境变量。注意我们也给 DISPLAY 变量加了一个值,这个值是我们之前使用 SSH 连接服务器时找到的:

python ssh password 写变量 ssh pycharm_python_13

然后回到 Preferences > Build, Execution, Deployment > Console > Python console 然后选择 Always show the debug console。这在我们调试的时候非常有用:

python ssh password 写变量 ssh pycharm_Python_14

创建一个运行配置

在你的项目中创建一个简单的名为 test.py 的测试文件,其中仅包含:

import tensorflow

print "Tensorflow Imported"

现在进入 Run > Edit Configurations…,点击 + 按钮创建一个新的 Python 配置。为其命名后选择该脚本运行:

python ssh password 写变量 ssh pycharm_python_15

现在像之前一样进入所需的环境变量。小技巧:你可以直接从我们之前指定的控制台设置中直接复制它们,在左下角使用 Ctrl+A 和复制/粘贴即可。你可以通过点击 Environment variables 一行后面的加点按钮获取它们。

python ssh password 写变量 ssh pycharm_python_16

点击 OK > OK 开始测试!

测试该设置

现在我们应该全部完成了,改进行测试了。首先打开终端并确保你至少有一个带有 X 转发的 SSH 信道连接到你的服务器。如果你的连接已经开启了一段时间了,你可能必须退出并重启它们:

ssh [remote username here]@[remote Ip here]

控制台

然后打开 PyCharm 中底部栏的 Python Console 并输入 import tensorflow。然后你可以输入 ls/ 来验证你确实在你的服务器上执行该命令。输出应该是这样的:

python ssh password 写变量 ssh pycharm_Test_17

运行脚本

现在回到你的 test.py 脚本,然后选择顶部栏的 Run > Run…。选择你新建的运行配置 Test,其应该输出这样的结果:

python ssh password 写变量 ssh pycharm_Test_18

绘图

让我们做一些绘图,把你的 test.py 文件改成这样:

import tensorflow

import matplotlib

matplotlib.use('GTKAgg')

import matplotlib.pyplot as plt

import numpy as np

print "Tensorflow Imported"

plt.plot(np.arange(100))

plt.show()

接着用你的运行配置 Test 再一次运行它,你会得到这个图:

python ssh password 写变量 ssh pycharm_Deployment_19

这个图实际上在你的远程服务器上完成,但是窗口数据被转向到了你的本地机器。注意我们可以用 matplotlib.use('GTXAgg') 改变支持,因为它是一个支持 X11 的显示后台。你可以在这里阅读更多关于 Matplotlib 后台的信息:

http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

你也可以在 matplotlibrc 文件中修改默认行为。记住在一个分离开的终端中你需要至少一个开放的 SSH 连接,使用 DISPLAY 环境变量的正确值以使其工作。如果无效尝试重新启动你的 SSH 连接。

调试脚本

最后做一些调试。点击左侧栏以放一个断点(breakpoint),接着点击 Run > Debug…,并选择 Test 配置。你将会看到执行已停止,然后你就可以远程调试脚本了。

python ssh password 写变量 ssh pycharm_python_20

下一步

为了使你的机器联网,你不得不在家庭路由器上转发端口,这根据不同的供应商而变化。我建议在你的路由器上转发一个超过 22 的不同端口。世界上存在很多动机不良的 bot 想要攻击你,它们会检查默认端口,也许会减慢你的连接(尽管你已经关闭了口令认证,所以你相当安全)。也许你可以把你的路由器上的端口 4343 转发到 IP 192.168.0.1 上的端口 22(该教程中我们的远程默认 IP)。