赞
踩
写在前面
之前用的都是可视化的远程控制软件(向某葵等)来实现远控,这个最大的优点就是可操作空间很大,但是存在下面几个问题:
1、针对主要业务是编程的用户来说,图形界面的传输无疑是浪费了大量的带宽的,所以一旦你的网速或者服务器的网速不够快,你实际coding的效率就会大打折扣了;
2、无法实现被控端与控制端的共同操作,A想用到B的服务器的资源,但是如果B也正在coding,B必须暂停给A用;
3、A机子想要把刚复制的文本传给B(比如说想要将A查到某篇博客的代码段复制到实际的运行环境B上运行的时候,就需要通过间接的方式发送过去,降低开发效率);
4、以后的的工作场景下远程服务器也是没有图形界面的;
综上所述,利用ssh来实现remote coding才是专业coder的康庄大道。这篇文章记录一下初次使用ssh的过程中遇到的各种问题,也为了方便以后换了服务器能快速根据这个笔记搭建起来。
总体需求:A要通过ssh链接到B,然后直接在A的界面直接对B进行没有图形界面的终端操作。
按照下面这个格式来配置服务器信息。
Host xxx
HostName ip
Port 端口
User 服务器的用户名
IdentityFile "C:\Users\xxx\.ssh\id_rsa" # 存储的认证密钥,后面会讲
然后把config这个文件路径填进插件的配置路径里。
接下来以客户端A远程控制服务器B为例,讲解个操作系统下的配置过程。A和B都各子可以是任意的操作系统,大家只需要根据自己的客户端和服务器各自是什么os对号入座在下面找到对应的安装和配置方法即可。
window下,openssh分为客户端(client)和服务端(server)。可以先通过下面两种方式查看这两个服务是否已安装:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
client的作用顾名思义就是给本机一个接口去用ssh链接其他服务器,并且把这个ssh路径配置到系统环境变量path中,window系统一般都配置好的。但是这里有个小坑就是如果你的window同时有了git的ssh和openssh,这样会有冲突,可以选择把自带的openssh中的环境变量删掉,把git的ssh目录添加进去,如下图所示。
server的作用顾名思义就是本机要作为服务器给其他主机控制时,本机上就要运行openssh-server。 server则需要自己下载,可以通过微软提供的在线下载方式:设置界面或者powershell下载。但是如果报下面这个错误的话:
可以直接采用离线下载即可,参考这篇文章 - openssh离线下载 。server下载完之后,就要对openssh进行一些配置,window下的命令总结如下:
shell sc config sshd start= auto # 设置成开机自启动,装完openssh之后最 好立刻运行这条命令 net start sshd # 启动命令 net stop sshd # 关闭命令
配置完、启动server之后,还需要将本机的ssh的端口(常用就是22)暴露出去。具体操作就是:“控制面板”->“系统和安全”->“防火墙”->左侧栏上的"高级设置"->"入栈规则"右键”新建规则“,接下来看下图
接下来两步都是直接下一步即可。到此,其配备了ssh的机子就可以通过ssh来远程本台服务器了。
通过ssh连接windows服务器,报错"permission denied, try again",有两个方法:
同样,ubuntu下ssh也分为客户端(sshd)和服务端(sshd-agent)。输入下面命令,即可查看这个端的安装情况。
ps -e |grep ssh
如果哪个没有,直接按照下面的命令直接下载即可。
sudo apt-get install sshd
sudo apt-get install openssh-server
linux配置客户端和服务器都是同时启动和关闭的,因此只需要配置一次即可。
sudo systemctl enable ssh # 开机自动启动ssh命令
sudo systemctl disable ssh # 关闭ssh开机自动启动命令
sudo systemctl start ssh # 单次开启ssh
sudo systemctl stop ssh # 单次关闭ssh
reboot # 设置好后重启系统(不一定要操作)
sudo systemctl status ssh #查看ssh是否启动,看到Active: active (running)即表示成功
本人还没配置过mac的ssh,先占个坑位,以后用到再来填!
经过【1】之后,我们连接SSH是需要通过密码进行连接的,这会非常麻烦,每次连接都要重新输入密码,接下来就讲解各操作系统下的服务器的免密认证怎么操作。
window的配置参考这篇博客,讲的非常好:Windows OpenSSH 服务器启用密钥登录
ubuntu的配置非常简单,参考这篇博客即可: vscode连接服务器不用每次都输入密码
在【0】、【1】、【2】操作之后,我们已经可以实现了局域网内的ssh连接了。但是生产工作环境中,更多的应用场景是A跟B并不会在同一个局域网内的。现在要解决的就是A和B不在同一个局域网内,如何实现A仍能通过ssh控制B。cpolar应运而生!
总的来说cpolar就是先在B上运行起一个服务,建立一个隧道,A访问cpolar提供的域名,就会通过这个隧道访问到B,而A只需要将我们之前在vscode上填的ip换为coplar提供的域名即可。 接下来介绍一下在各个os下的B运行起cpolar的操作步骤。cpolar的官网链接
cpolar version # 查看版本号
cpolar authtoken xxxxxxx # token认证,登录cpolar官网,然后在“验证”那一块有
cpolar http 8080 # 挂http服务
如果因为重复认证导致授权失败等原因需要重新安装cpolar的时候,需要卸载上一个cpolar,但是不卸载干净就会导致无法重装,所以这里给出一个完全干净的卸载流程:
按照这篇blog来即可 - Ubuntu用户安装Cpolar内网穿透。然后在vscode的ssh配置中把hostname字段的值改成官网里看到的这个字段即可。
cpolar的常用指令
cpolar version # 查看版本号
cpolar authtoken xxxxxxx # token认证,登录cpolar官网,然后在“验证”那一块有
cpolar http 8080 # 挂http服务
sudo systemctl start cpolar # 启动cpolar服务
sudo systemctl stop cpolar # 停止cpolar服务
sudo systemctl status cpolar # 查看服务状态
sudo systemctl enable cpolar # 开机自启动
This host key is known by the following other names/addresses
原因:这个问题出现是因为cpolar每次启动之后生成的tcp域名和接口都是不同的,所以直接用旧域名链接的时候,因为访问服务器的客户端都是同一台机子,访问ip是相同的,但是服务端那边的保存的曾经访问过的host name/address没有这个新的,就会报错。
解决方法1: 直接开一个终端来通过访问,然后强行把这个新域名和端口添加进去。
解决方法2: 氪金升级成专业版,独享固定的tcp域名。具体操作看这篇blog - cpolar如何配置固定TCP地址
配置完之后,cpolar没有显示对应的ssh端口,连接不上默认启动的ssh?
解决方法:先确保服务器的ssh服务端已安装好,如果还不行就把服务器直接重启。
还没配过,配了再来填坑。
这里记录一下实际使用过程中遇到的问题和很好用的技巧!为了给技巧和问题分类,这里我采用场景来作为分类,比如某一节的标题为“window10=>ubuntu”就代表该节下的所有技巧和问题都是我在这个场景下遇到的。
问题
需要在window和linux下互传文件,利用百度网盘等在线网盘速度慢,而且linux下的网盘不稳定,下载大文件时容易中断,而且整个过程耗时长(需要先上传,然后再下载)。
解决
WinSCP 是一个在 Windows 环境下使用 SSH 的开源图形化 SFTP 客户端,同时支持 SCP 协议。它的主要功能是在本地与远程计算机之间安全地复制文件。与使用 FTP 上传代码相比,通过 WinSCP 可以直接使用服务器账户密码访问服务器,无需在服务器端做任何配置。
使用链接:WinSCP使用文档
问题
远程连接服务器在执行训练神经网络等需要长时间运行任务时,一旦因为网络等原因导致了ssh链接中断了,训练就白费了。
解决
利用linux里边的screen程序可以解决,具体的介绍和使用方法可以参考这篇blog - Linux–screen远程必备 #screen常用命令-会话的创建、恢复、删除(&重命名删除)用法。
下面我总结出大概的使用流程(以深度学习为例):
① 创建一个screen(yao),之后就会进入这个screen里边;
screen -S yao
② 在这个screen里头运行你的代码(运行test文件);
python test.py
③ 把这个screen detach掉,挂起来运行,回到你的原本界面,这时候你想关掉当前的ssh链接也行了;
screen -d yao # 或者直接快捷键 ctrl a + d
④ 当你觉得跑的差不多了,想看一下跑得咋样,就重新连一下ssh,然后执行下面的命令进入到你之前的那个screen;
screen -r yao # 恢复进入screen
如果你忘记了之前的screen叫啥,可以查看一下列表
screen -ls
或者想让其他人进入你这个screen,也可以
screen -x yao
⑤ 不用了之后删除这个screen。
screen -S yao -X quit
参考这篇文章 - vscode ssh远程连接服务器 无法跳转函数定义
如果服务器的硬盘需要手动挂载,可以在成功通过ssh连接到服务器之后,通过这个方法来实现硬盘的自动挂载-硬盘挂载
现有A和B两台处在同一个局域网下的linux服务,B无法通过联网下载conda环境,而A可以连外网,这是通过SCP命令直接将A的环境传输到B中,如下所示:
scp /homeA/anaconda3/envs/xxx username@address:/homeB/anaconda3/envs/xxx
前提是两台服务器的cuda版本要求要相同。但是这样传输完之后,直接调用还是没办法使用对应环境里边的python的,这时需要通过下面代码修改权限就可以了。
chmod +x /home/anaconda3/envs/xxx/bin/python
打开vscode,点击左上角菜单 -> “View” -> ”Comand Platte" -> 输入“Remote SSH: Kill VS Code Server on Host…” ->选择对应的host进行清空。
用可视化软件控制服务器,人工下载替代wget,详细可参考这篇文章:link
参考:link。
参考链接:link。
在conda环境中安装nvitop
pip3 install --upgrade nvitop
接着在该环境中输入
nvitop
scp除了可以用来进行linux和linux的文件传输,还可以从linux到window,当然也可以window到linux(互换一下命令种的位置即可)。下面以从linux上转移文件到window为例子进行解释:
scp -P 6666 /home/xx/demo.txt User@Win_IP:/E:/aaa/bbb
这句命令是将ubuntu上的demo.txt文件拷贝到window的/E:/aaa/bbb目录下。其中,6666是远程服务器(window10)的ssh端口号。记住P是大写的,并且要写在前面。/home/xx/demo.txt是ubuntu上面的路径下的文件。User是远程主机用户名,Win_IP是远程主机IP地址。/E:/aaa/bbb 是
/home/xx/demo.txt要在远程主机上存放的位置。如果要传输文件夹,用下面命令:
scp -P 6666 -r /home/xx User@Win_IP:/E:/aaa/bbb
这句命令的作用是将*/home/xx* 传输到*/E:/aaa/bbb* 下,-r是递归传输的意思。如果要给传输进度加上进度条,加上-v即可:
scp -P 6666 -v /home/xx/demo.txt User@Win_IP:/E:/aaa/bbb
当linux作为主力机的时候,难免会遇到一些压缩和解压的操作,这里记一下,不用每次都去搜。参考:link
tar格式:
# 压缩当前目录下文件夹/文件test到test.tar.gz
tar -zcvf test.tar.gz test
# 解压当前目录下的file.tar.gz到file
tar -zxvf file.tar.gz
zip形式:
# 压缩当前目录下文件夹/文件test到test.zip
zip -r test.zip test
# 解压当前目录下的file.tar.gz到file
unzip test.zip
这里顺便记录一下linux安装.deb包的命令
sudo dpkg -i package_file.deb
外网上网是必不可少的。当linux作为主力机的时候,配置有一点麻烦,这里记一下坑。参考:link
主要就是按照上述教程来操作即可,但是有几点要稍微注意的:
Builtin Subscription Support: Basic Based64
端口已被本地进程占用的情况
问题如下:
解决:直接终端打开输入
vim /home/lyh/anaconda3/envs/hsi/bin/tensorboard
然后把路径修改为你自己的就可以了。参考
写在后面
以上都是作者实操踩雷的经验,如果这篇文章给了你一点帮助不妨给个声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/892339
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。