ssh connection refused.
/etc/init.d/ssh start
PasswordAuthentication yes
,如果是7.4以后的版本,这里需要修改一下.在CentOS7.4中其强行添加 RSAAuthentication 配置会触发系统对它的废除提示。reprocess config line 38: Deprecated option RSAAuthentication
将sshd_config改为如下:
# PermitRootLogin prohibit-password # 默认打开 禁止root用户使用密码登陆,需要将其注释
# RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #允许root用户使用ssh登录
PasswordAuthentication yes
# 查找nvidia-smi的绝对路径:
find -name nvidia-smi
# 返回:./usr/local/nvidia/bin/nvidia-smi
# 将nvidia-smi所在目录添加入环境变量
export PATH=/usr/local/nvidia/bin:$PATH
完美解决,感谢双朋。
之前项目组每个人都独立地在各自docker内进行开发,这次做AutoML涉及到了很多个团队的成员,结果发现有些小伙伴在自己的docker下开发模块,merge以后因为别人的环境不一致结果频繁报错,也是项目管理没经验。这次整理一个简易版的VS code和Docker联调的方式,以后项目开发先搭建公共环境,引以为戒。
安装了docker服务的远程服务器,有vscode的本地笔记本。开始。
服务器上创建docker,这里我用的是被封装过的nvidia-docker:
$ nvidia-docker run -p 8022:22 -v /automl:/workspace/automl -it mydetnas:v1 /bin/bash
简单说下,-p 8022:22
把docker的端口22映射到服务器的8022端口,这样之后通过 ssh root@
就能访问到docker了
-v
挂载和同步目录,这样服务器和docker内就有一个文件夹会试中保持同步了。
-it
让docker后台交互运行
mydetnas:v1
镜像名
最后是docker内要运行的指令。
这里各个博客写的五花八门,我就把自己配置的方式记录一下,亲测可用,以供后之来者。
进入docker
-$ nvidia-docker exec -it [容器ID] /bin/bash
# 用docker exec -it [容器ID] /bin/bash 也可以
在docker中输入以下内容,安装ssh服务
$ apt update
$ apt install -y openssh-server
然后输入passwd
,修改root账户密码。
输入vim /etc/ssh/sshd_config
,打开ssh配置文件,修改以下内容,以允许root账户通过密码登录:
# PermitRootLogin prohibit-password # 默认打开 禁止root用户使用密码登陆,需要将其注释
# RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #允许root用户使用ssh登录
PasswordAuthentication yes
这里更新一下:RSAAuthentication在CentoOS 7.4 中已经废除,通过密码登录的选项改为了PasswordAuthentication yes
,如果是7.4以后的版本,这里需要修改一下.在CentOS7.4中其强行添加 RSAAuthentication 配置会触发系统对它的废除提示。1
reprocess config line 38: Deprecated option RSAAuthentication
最后我们重启以下ssh,退出docker然后测试一下
root@container-$ /etc/init.d/ssh restart
root@container-$ exit
# 输入一下指令,验证端口映射无误
user@server-$ sudo docker port [容器ID] 22
# 如果设置正确,将输出:
#0.0.0.0:8022
在自己的笔记本上,打开cmd
,输入ssh尝试连接
-> ssh username@server_IP -p 8022
# 回车后输入密码,就可以从本地登录远程服务器的docker了
打开VS code,在扩展栏(或者按ctr+shift+X)查找安装Remote Development
安装完成后需要reload一下,然后按ctr+shift+p,打开查找栏,输入remote-ssh,选择open Configuration file
Host随便起名字,这里我用AutoML_docker命名。在HostName的地方输入服务器的ip,注意端口Port是我们之前docker映射到服务器上的端口号。
配置成功后左边会多出一个远程浏览的标签,点开就可以看到刚才配置的远程连接了。点击之后要输入密码,即我们创建docker后修改的root密码。
菜单查看-扩展或者Ctrl + Shift + X,在商店中搜索“Python”,找到“适Python extension for Visual Studio Code”安装在服务器docker中,然后重启VSCode。
之后,菜单查看-命令面板或者Ctrl + Shift + P,输入“python: select interpreter”,点击选择解析器,稍等几秒钟,就会列出在系统中找到的Python环境(Python环境要加入环境变量才能被找到),点击需要的python解析器即可。
打开debug选项卡,选择Add configuration
编辑launch.json文件如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "python",
"request": "launch",
"name": "Python: Current File (Integrated Terminal)",
"skipFiles": [
"/**"
],
"program": "${file}"
}
]
}
launch.json常用的调试配置有:2
Ok,至此配置VScode就结束了,可以选择刚才配置的解释器来逐行调试docker内的代码了。因为docker的代码是通过-v与服务器同步的,所以修改后也会直接改动服务器上存的代码,大家git的时候就只需要在服务器端设置,而不用在docker内再考虑这个问题了。
参考连接:https://www.cnblogs.com/Leroscox/p/9627809.html ↩︎
参考连接:https://blog.csdn.net/zzzzllll2006/article/details/83014940 ↩︎