这其实是参考WingIDE官网的介绍,很多是用谷歌翻译过来的。
为远程开发进行SSH设置
安装SSH
查看SSH服务是不是安装
sudo ps -e |grep ssh
出现如下界面表示已安装
否则使用如下命令安装
sudo apt-get install openssh-server
生成SSH密钥对
在运行Wing Pro的系统上使用ssh-keygen生成一个SSH密钥:
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
使用默认设置并输入用于加密私钥的密码,将产生~/.ssh/id_rsa
(私钥文件)和~/.ssh/id_rsa.pub
(公钥文件)。
把 ssh 公钥复制到远程主机上
你需要将公钥的副本传到要连接的远程主机,并添加到~/.ssh/authorized_keys
。 采用下面的方法:
ssh username@remotehost "mkdir .ssh; chmod 700 .ssh"
ssh username@remotehost "sed -i -e '$a\' .ssh/authorized_keys"
scp ~/.ssh/id_rsa.pub username@remotehost:.ssh/pub.tmp
ssh username@remotehost "cat .ssh/pub.tmp >> .ssh/authorized_keys; rm .ssh/pub.tmp"
仅当远程系统上没有~/.ssh
目录时才需要上面的第一行 。仅当远程系统上已经有~/.ssh /authorized_keys
时才需要第二行,它的作用是确保它换行符结尾,从而使添加的密钥位于单独的行上。第三和第四行将公用密钥传输到远程主机,并将其添加为授权登录而无需输入密码的密钥。
将SSH私钥加载到用户代理中
Wing使用SSH用户代理来存储您的私钥,以便ssh可以根据需要访问它们,而无需提示您输入密码。如果你通常使用ssh -i mykey.pem user@remote
这样的命令连接到远程主机,你需要将密钥加载到用户代理中。
为此,请在运行IDE的主机上运行ssh-add
。系统将提示您输入私钥的加密密码(如果有),然后将该密钥加载到用户代理中。
现在,您无需输入密码就可以用下面的方式连接到远程主机:
ssh username @ remotehost
使用非默认SSH端口
如果远程服务器在非默认端口上运行SSH,则还需要在运行IDE的主机上编辑SSH配置以设置该端口。在~/.ssh/config
中加入下面的信息:
host myhost.mydomain.com
port 8022
配置远程主机
使用Project
菜单中的Remote Hosts
来配置远程 主机来告诉Wing远程主机及其连接方法。在远程主机对话框的三个选项卡中指定以下值:
- Identifier(必填)是用于引用此远程主机配置的唯一短名称。在引用远程主机上资源的URL中使用它。如果更改了现有远程主机配置的ID,Wing将在项目中存储的所有远程主机引用中跟踪该更改。但是,对于共享的远程主机配置,最好不要在使用ID后更改ID。
- Host Name(必填)是远程主机的名称或IP地址。主机名可以包括用户名,格式为
username@hostname
或username@ipaddress
。如果远程主机上的用户名与本地主机上的用户名不同,就需要这样指明。
Python Executable
是用于运行Wing的远程代理以及调试或远程执行的Python。如果可以在PATH
上找到Python,则可以将这一项留为空白 。在这种情况下,Wing首先查找python3
,失败地话使用 python
。否则,可以将其设置为Activated Env
来输入激活远程主机上的virtualenv或Anaconda环境的命令,也可以将其设置为 Command Line
以指定要运行的python
。如果不确定要使用的Python的位置,请在Wing外部运行它并执行import sys; print(sys.executable)
来获取要使用的值。如果您的Python无法在没有某些环境变量(例如PYTHONHOME
或PYTHONPATH
)的情况下运行,那么您将需要按照为Remote Python指定环境中所述来设置自定义启动脚本 。
Base Directory
是在远程主机上的所有文件引用的目录,因此Wing将仅显示来自已配置Base Directory的相对路径。默认情况下,它是远程用户的主目录。如果此值是部分路径,则将其解释为相对于远程用户的主目录。在现有配置上更改此值时,Wing会尝试查找相对于新Base Directory的资源。
SSH Port
设置了在远程主机上运行OpenSSH的端口。默认值为端口22或在.ssh/config
或PuTTY的已保存会话中配置的任何端口号。
Private Key
指定连接到远程主机时要使用的私钥文件。默认设置是使用SSH用户代理(对于OpenSSH ,使用ssh-agent
;对于PuTTY,使用pageant
)。密钥文件格式必须与正在使用的SSH实现相匹配( 对于OpenSSH,通常为.rsa
,对于PuTTY 通常为.ppk
)。
如果文件未明确设置编码,则File Encoding
是在远程主机上打开或创建文件时使用的默认文本编码。
I/O Encoding
是用于通过调试器或OS Commands
工具在远程主机上启动的进程之间进行I / O的文本编码。
Install Dir
是Wing远程代理在远程主机上安装位置的完整路径。Wing将根据需要自动安装和更新远程代理。建议使用此设置的默认值,因为这将根据您使用的Wing版本自动添加和删除远程代理。
Use SSH Tunnel for username@localhost
控制远程代理是否将通过反向SSH隧道连接到Wing,即使是连接到本地主机上的另一个用户。如果用户是本地主机上的另一个帐户,或者当连接到在Windows的Linux子系统(WSL)下运行的Linux时,应禁用此功能;当连接到隔离的容器(如Vagrant)时,必须启用此功能。
Remote Agent Port
是用于SSH隧道远程端上的远程代理的TCP / IP端口。如果未指定,则Wing使用在连接的IDE端确定的随机端口号。这通常是可行的,但不能保证该端口在远程端也可用。设置后,此属性应为未使用的非特权临时端口号(在Windows上通常为1025
和65535
之间,在Linux 上 通常为32768
和61000
之间,在其他地方为49152
和65535
之间)。
Remote Debug Port
是第一个用于SSH隧道远程端上的调试器的TCP / IP端口。默认情况下,对于远程代理端口,使用随机端口。
2FA Card Selector
与OpenSSH集成一起使用,可在启动时提示您选择2FA卡。输入的文本在启动时被写入SSH进程。它以纯文本格式存储在远程主机配置中,因此不应用作密码。该值仅用于OpenSSH,而不用于PuTTY。
安装和运行远程代理
配置远程主机后,Wing将尝试连接到该主机并安装远程代理(如果尚不存在)。
在极少数情况下,您可能需要按照手动安装远程代理中所述来手动安装远程代理。
一旦安装,远程代理将根据需要启动或重新启动,如果未使用,它将在超时后退出。远程代理允许Wing搜索、检查、读取和写入文件和目录、创建或删除文件、启动调试或执行、运行单元测试、调用版本控制操作,运行Python Shell
,在OS Commands
中调用命令以及在远程主机上执行其它的操作来支持IDE的功能。与远程代理进行通信并远程支持调试文件所需的SSH隧道也会自动管理。
共享的远程主机配置
远程主机配置既可以存储在项目文件中,也可以在Settings Directory中共享, 以便可以从所有项目中访问它们。若要共享一个远程主机配置,请在从Project
菜单中的Remote Hosts
所访问的远程主机管理器中选中该配置的Shared
框。
通常,当项目文件存储在远程主机上时,应使用共享的远程主机配置;当项目文件存储在本地但访问远程主机上的资源时,应使用非共享的远程主机配置。
设置远程项目
有两种使用远程主机的方法:(1)本地存储的项目文件可以引用远程资源,(2)存储在远程主机上并远程打开的项目文件可以透明地访问该远程主机上的资源。
本地项目文件
对于需要访问另一台主机上的资源的本地存储项目,它的Project Properties
中的Python Executable
属性Remote
,表明项目的Python位于远程主机上。所选的远程主机配置通常是非共享配置,因此它将存储在项目中,并且如果将项目移至另一台计算机,则可以访问。但是请注意,远程主机配置可能特定于单个计算机的网络环境,并且可能需要在其他主机上进行编辑。
设置Python Executable
后,引用文件的其他属性(例如 Initial Directory
和Python Path
)将在远程主机上解析。这些属性的Browse``按钮将浏览远程主机,并且路径将被存储为相对于已配置的
Base Directory部分路径,或者将被存储为全部路径(如果位于
Base Directory之外)。远程主机上的路径始终使用正斜杠
/`表示,并将根据需要转换为远程主机上的本机分隔符。
所选的远程主机也将用于向项目添加文件和目录。给定远程文件或目录的URL时,它的格式为ssh://hostid/path/to/file.py
,其中hostid
是已配置的Remote Hosts IDs
。
本地存储的项目可以包括多个主机上的文件和目录,通过添加几台主机,并和每个主机使用Add Existing File
和Add Existing Directory
。
远程项目文件
使用Project
菜单中的Open Remote Project
可以打开存储在远程主机上的 Project
。除非您已经创建了共享的远程主机配置,否则不会显示此菜单项。这样存储的项目是正常的Wing项目,如果Wing也可以在远程主机本身上运行,则也可以在本地打开。在这种情况下,Python Executable
可以简单地设置为Default
、Command Line
或Activated Env
,就像项目存储在本地一样。Wing通过一种方式解析项目文件中的所有资源,使其可以在存储项目的主机上访问它们。
如果将任何远程主机配置添加到远程存储的项目中,为了访问其他远程主机,这些配置必须在运行IDE的主机上起作用。
创建项目文件
要设置访问远程主机的新 项目,请使用Project
菜单中的New Project
并将 Connect to Remote Host (via SSH)
”指定为项目类型。这将要求与上一节中描述的字段相同,以创建远程主机配置。如果以前已经创建了配置,请使用Recent Hosts
下拉列表复制该配置。
使用New Project
对话框所创建的项目保存在本地,除非用了Project``菜单的
Save Project on Remote Host来把项目存储在远程主机上。在这种情况下,必须首先在
Remote Hosts`对话框中将远程主机配置设置为共享,因此始终可以在本地计算机上访问它,并可用于打开远程项目。
定期创建的本地项目也可以用 Project
菜单中的Save Project On Remote Host
来移动到远程主机。仅当至少有一个共享的远程主机配置时,此菜单项才可见。以这种方式保存项目仅会移动项目文件本身,并假定项目引用的资源也将在远程主机上可用,并且具有与项目文件相同的相对路径。
远程开发功能
一旦设置了远程项目,就应该能够以与本地情况相同的方式来编辑,调试,测试以及以其他方式使用Wing。
编辑中
在远程主机上进行编辑与在本地主机上进行编辑没有什么不同,除了在某些情况下,文件的内容在首次打开时可能需要更长的时间才能显示。
调试
调试的工作方式也与本地文件相同。Wing将通过其SSH隧道自动将调试连接启动到远程主机。文件名将以hostid:filename
的形式显示,但是调试的方式与在本地主机上相同。
要在多个不同的远程主机上进行调试,请使用Project
菜单中的Launch Configurations
在 每个主机上创建调试配置。这是以和Project Properties
同样的方式实现的,通过设置Python
下Python Executable
为Remote
。然后设置一个Named Entry Point,将该远程主机上的文件与同一远程主机的启动配置配对。
无论您使用项目范围的设置还是启动配置,调试的文件都需要存储在选定的远程主机上。您无法使用这种样式的远程调试配置从另一台主机上的一台主机调试文件。
在远程主机上调试时 ,将 忽略“Debugger > I/O > Use External Console
,并且“ I / O”始终出现在Debug I/O
工具中。如果远程进程需要在其他控制台中运行,请在该控制台中启动它并从代码中启动调试,如调试外部启动的远程代码中所述。
在远程主机上调试时,也不使用Debugger > Diagnostics
。可以代替使用以下环境变量来收集调试器诊断信息。仅应在Wingware技术支持的要求下使用这些文件,并且可以将生成的日志文件与您的错误报告一起通过电子邮件发送至[email protected]
:
解决调试器问题时,可以使用WINGDB_LOGFILE设置诊断日志文件。应该将环境变量设置为远程主机上日志文件的完整路径。
WINGDB_LOGVERYVERBOSE选择是否打印极其详细的低级日志记录。这几乎是不需要的,并且会大大减慢调试速度。
调试外部启动的代码
如果需要从Wing外部启动调试过程,那么对于在远程主机上运行的服务,可以通过导入wingdbstub
调试这些过程。当您安装远程代理时,Wing将正确配置的wingdbstub.py
副本写入远程代理的安装目录。要使用它,请按照调试外部启动的远程代码中的说明进行操作 。
Python Shell
在“Project Properties
中将Python Executable
设置为远程主机后,可以从其Options
菜单重新启动Python Shell
,以启动在远程主机上运行的Shell。
远程测试
如果已将远程文件添加到Testing
工具,则可以像在IDE一样的主机上运行或调试单元测试。
版本控制
如果将远程文件签入版本控制系统,Wing应该像对本地文件一样识别此文件,并在Tools
菜单中包括适当的工具。版本控制功能对远程文件的作用与对本地文件的作用相同。但是,可能有必要使用Project Properties
中的VCS
选项卡为远程主机配置版本控制。
由于缺少对必要SSH密钥的访问权限,访问版本控制存储库的操作(例如推和拉)可能无法正常工作。有两种可能的解决方案:
- 如果远程VCS命令尝试显示密码收集对话框,则可以在远程主机配置中打开
Forward X11
选项,以便该对话框将出现在运行Wing的计算机上。在Windows和OS X上,这要求在本地计算机上安装X11服务器。 - 通过将
ForwardAgent yes
添加到运行Wing的计算机上的.ssh/config
中,可以将本地主机的SSH代理凭据转发到远程主机。最好将其限制在需要它的主机上,并且只有在了解安全隐患的情况下才应该这样做。
操作系统命令
该OS commands
工具还支持使用Command Line
式命令的Environment
标签下的Hostname
属性的远程工作。对于Python File
和Named Entry Point
样式的OS命令,从执行文件的位置推断出主机名。
远程代理用户设置
远程代理对Settings Directory
使用与IDE 相同的默认位置。在某些情况下,例如在某些嵌入式设备上,由于文件系统是只读的,因此无法使用它。在这种情况下,远程代理将使用远程主机配置中指定的WINGHOME
内名为user-settings
的目录进行备份 。user-settings
的远程代理已安装后目录将被自动创建。
为远程Python指定环境
Wing使用您在Project Properties
中指定的任何Environment
来执行,调试或测试您的代码。但是,由于它是在ssh
或plink.exe
提供的环境中启动的,因此在运行远程代理时不能使用此环境。
因此,如果远程主机上的Python安装需要某些环境变量才能运行,则Wing尝试使用它运行远程代理时,它可能无法启动。
要解决此问题,请创建一个shell脚本,该脚本设置必要的环境并启动Python。例如,如果您的Python需要设置PYTHONHOME
和PYTHONPATH
,则可以编写如下代码:
#!/bin/bash
export PYTHONHOME=/
export PYTHONPATH=/lib/python2.7
python "$@"
然后对上面的脚本使用chmod + x
,使其可执行,并将远程主机配置中的Python Executable
设置为完整路径。