推荐大家非常好的ssh入门教程,详细地介绍了本地转发
扩展小知识:
转发=映射
”本地转发”表示ssh发起方(也就是本地)是映射转发者
”远程转发也叫反向隧道”表示ssh发起方是映射真身,远程是映射转发者
也就是ssh发起方是转发者叫本地转发,或本地映射,远程转发是ssh接受方是转发者也就是本地不是转发者
本地远程二者的区别朱双印大佬的博客写的非常详细,推荐
要补充一点是本地和远程命令的一致性
都是
SSH -R或-L [被映射ip:]被映射端口:映射ip:映射端口 要ssh的用户@要ssh的ip
记住这一条指令,其他的啥都好理解了
已知有两种方法
1.直接使用ssh -L的命令进行本地转发(local farwarding)
2.使用MobaXterm的隧道工具实现本地转发
设置非常简单
更推荐大家使用软件MobaXterm来代替命令,其实本质上都是一样的,软件也是调用ssh命令,但软件更好管理。
优化:
1.对ssh服务器设置公钥,2.设置config
Host jlu
HostName localhost
Port 5000
User zxy
IdentitiesOnly yes
就像这样子,下次输入ssh jlu即可直接登录,本质就是下面提供了默认的参数,就像--p 5000这样
常见的错误
使用的localhost端口是已经被其他进程占用的端口
最开始使用的是6000端口,但是最开始一直无法start,正常情况下运作的话应该是start不亮,stop亮。如下图是正常工作的按钮,但6000端口无法正常工作。
原因在于6000端口有其他进程在占用导致不成功
输入命令
netstat -ano|findstr "6000"
表头,pid也就是最后一列代表了正在使用该端口的进程
6000占用情况
发现6000端口已经被相当多进程占用了,此时再用6000会极大概率造成冲突,这也是为什么隧道无法建成的原因,正常情况下一个端口只能被一个进程监听,但一个进程可以监听多个端口,是一个一对多的情况,但这里却不是这样,有的博客是说是完全可以一对多的
小知识(可选读):
如上图是我用指令查找到的7890端口的情况,可以看到7890端口监听了0.0.0.0:0也就是所有端口,ESTABLISHED表示已经建立了连接,、就比如第4行,表示13036的clash在7890端口,与6779端口建立了连接。第三行表示13036的clash在7890端口监听所有ip地址的连接请求,也就是所有ip向13036发起连接,他都能接受。github桌面程序想要与github.com交换信息,需要从7890端口出去,由clash代替6779端口与github.com交换信息。上面都是基于进程的桌面端的,然后web浏览器的访问代理是需要打开windows设置中的使用代理服务器,让流量每次发送都通过代理服务器,这样才能让浏览器也达到一样的效果
解决方法
使用没有进程被监听的本地端口,比如5000
pycharm配置
1.建立ssh会话
2.解释器选择和映射
设置如下图
值得注意的是母选项卡为项目:项目名,这里的东西都是会随着项目文件夹而改变的设置,每个项目都是独立的,这些设置被存储在项目文件夹的.idea文件夹里,不同项目的设置当然无法同步。
记得每一个新项目一定要填解释器的路径映射,将本地项目路径映射到远程项目,在执行代码时,一定要使用本地的文件,pycharm会自动映射本地路径到远程项目路径,实际上执行的是远程的映射文件,使用的是远程编译器。
上图为Python路径
3设置sftp,内网服务器到本地的文件映射
这一步其实可以不用执行了,因为在设置解释器时就已经添加好了一个sftp
这里写用户路径
这里写项目路径,本地也新建一个同项目名相同的文件夹就好了,这个也是每次更换项目要重新设置,注意此处千万不要设置仅对此项目可见,否则会无法正常加载python解释器!
上图中zxy@127.0.0.1的那个sftp是解释器创建的关于项目文件的映射,我们可以用它也可以用自己创建的,只要文件路径映射的没问题就行
再次对部署进行检查,主要就是看部署的路径对不对,路径=根路径+部署路径,此外这个部署配置必须设置为默认部署(上方的对勾要对他设置,默认部署是加粗的,如第一行配置所示),因为pycharm同时只能与一个部署配置同步,不设置好默认部署很可能东西传到其他部署配置指定的路径上了
顺便可以打开自动上传,经验证只要是本地和云端在已经同步的情况下(即状态已经是=了,后面会将)在本地做修改会自动上传到云端,小的py文件可以自动同步,另外本地添加删除py文件也能自动同步,意思就是在本地修改完py文件,直接运行就行,云端已经同步好了。
打开选项,可以看到远程主机的设置
每一个选项都能在官方的文档中找到详细地解释,覆盖最新文件我觉得应该可以关掉吧,应该是关掉更好?时间戳是肯定要保留的,也是作为两个文件相同的依据嘛。我觉得这里的设置都可以不动,因为目前没有必要,只要满足只在本地修改py文件的原则,就能够正确同步,其他的啥都好说。
4.文件同步
首先要设置好本项目的默认部署服务器,在下面选好
法1、点击下载自,进行下载
第一次的话左边本地的项目文件应该是空的,我们要直接将远程服务器的文件都给下载下来 ,但注意数据集最好单独操作,否则要下一年!
法2(推荐)、使用同步对话框也可以达到全都下载、上传的功能
该方法管理更加方便,功能强大, 右击项目文件夹(云服务器上的还是本地创建的都行,上一步以及映射过了)
此时会进入同步选择页面,我们可以自行选择是否同步
页面功能详解
总览
这三个分别是同步选定项,全部同步,是否隐藏排除的文件
同步选定项 | 只同步选中的该项 |
全部同步 | 同步所有不为相等(也就是不为等号的文件)的文件,涉及到后面的知识 |
是否隐藏排除的文件 | 指的是git ignore的文件 |
比较依据一般都选择二进制内容,我们只要保证二进制内容一样就说明同步是正确的
文件操作状态
标红的这一列非常重要,代表了文件的同步状态
1.等号
说明二者是相等的,是否相等取决于比较依据,这里是文件二进制相等,文件就认为是相等的
2.其他符号
在文件不为等号即不同步时可以右击打开菜单栏,调整对该文件的操作
总览
第一组
第一行:从本地传到云端
第二行:从云端 传到本地
第二组
这两个和上面的箭头好像 没有区别
不等于号
这个标记千万要小心使用会同步删除左右两端的这个文件,使用时一定要小心以免误删
4.特殊同步-数据集
数据集文件太大,不适合上面的同步方法,我们需要生产压缩包再进行上传,再终端中输入解压命令,完成同步。本地映射可以没有数据集,但远程必须要有数据集,因为是在远程执行的嘛。
常见错误和注意事项:
注意:一定要在远程部署服务器和解释器都配置好的情况下再进行操作,比如下载包,进行编译什么的,否则可能会出现一些因为环境搞错而产生的错误。
1、有时会出现错误:No such file or directory
要注意
1.使用本地的文件运行
2.配置好python解释器的映射
2、确定好再进行上传和下载
paycharm上传并不像百度网盘啥的有缓存的机制,上传直接覆盖原文件或者直接在上面进行修改,也就意味着一旦在上传、下载的时候终止上传、下载,那就会导致接收端的文件是不完整的,此时还要确定好重新传输,就像这一种
这zip就是在传输过程中还没有传完,是左边在向右边传,这个箭头反了是正常的,因为页面刷新他每次刷新都指向发送方,但我执行指令时箭头是向右的。我如果此时中断,右边就会有一个残缺版本的zip,就会导致两边不一致。
小提示:一般刷新后箭头对着的是发送方,日期老的是发送方,文件大的是发送方,可以根据这个确定发送方和接收方,中断时重新传输
3.报错: 错误:Can't get remote credentials for deployment server
原因deployment server也就是部署服务器的sftp设置成了仅对项目可见
全部把打钩给取消掉
远程调试展示图片
要使用ssh -X命令(更推荐使用mobaxterm,他的每一次ssh连接都是ssh -X),据说是X11会自带在远程主机上创建一个图像输出端口,使用如下命令就可以看到图像输出端口开在了哪。
pycharm添加上我们要输出到刚刚ssh -X打开的端口,如下配置
之后就可以正常本地展示了,mobaxterm开启的ssh -X终端不能关闭,否则输出端口将会跟着关闭了