由于项目的需求,学习了以下如何在Ubuntu的服务器上面装好Docker,并用SSH远程连接。下面是调用成功的调试顺序~
(1). 更新源列表
打开"终端窗口",输入"sudo apt-get update
"–>回车–>“输入当前登录用户的管理员密码”–>回车,就可以了。
(2).安装openssh-server
在终端中输入: sudo apt-get install openssh-server
(3) 查看 查看ssh服务是否启动
打开"终端窗口",输入"sudo ps -e |grep ssh
"–>回车–>有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start
"–>回车–>ssh服务就会启动。这里注意,第一句代码之后,弹出有sshd 才算ssh服务开启,如果什么都没有,但ssh服务就没有开启。
SSH服务 另外的启动方式:sudo /etc/init.d/ssh start
(4)SSH配置服务相关
配置相关:
ssh-server配置文件位于/etc/ssh/sshd_config
,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
添加端口就是在#Port 22的下一行 加上Port 8080。 8080可以写成你想要的其他端口
把配置文件中的”PermitRootLogin without-password
”加一个”#”号,把它注释掉,再增加一句”PermitRootLogin yes
” (可能没有PermitRootLogin without-password这行命令,在其相似的句子后面,加上PermitRootLogin yes
即可。 这是ssh服务开启root用户ssh权限。
然后重启SSH服务:
sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start
这里再记录一些SSH其他的常用命令:(Ubuntu18.04和20.04亲测好用)
sudo systemctl enable ssh sudo systemctl disable ssh sudo systemctl start ssh sudo systemctl stop ssh sudo systemctl status ssh
此时,你就可以用ssh远程连接你的这台ubuntu服务器了。
https://docs.docker.com/engine/install/ubuntu/
只需要执行到:Upgrade Docker Engine就ok了,此时Docker就装好咯!
1.自己尝试的部署SSH 成功方案
装好Docker 之后 你需要pull镜像,运行容器balabala等等。
这里分享一下,我经常用的run命令:
sudo docker run -itd --name="xxx" -p 8090:8090 ImageID(改为你的) /bin/bash sudo docker run -itd -v 宿主机目录:容器目录(code:/code) -p 10789:22 --shm-size="1g"(多线程运行程序可选) --gpus all --name="xxx" ImageID /bin/bash sudo docker run -itd -v /home/b605/code:/code(宿主机根目录) -p 10789:22 --shm-size="1g" --gpus all --name="cc" db15446df90b /bin/bash sudo docker run -itd -v /home/b605/code:/code -p 10789:22 --shm-size="1g" --gpus all --name="torch1.9.1" --restart=always f5bc49447a8e /bin/bash
然后用sudo docker attach 或者是 sudo docker exec命令连接docker容器(这里就不多说命令了,菜鸟教程上有很多解释)
连接上Docker容器之后,你可以通过passwd来修改当前容器的连接密码(也就是说,你在远程ssh连接需要输入的密码,用户名一般是root)
OK,到这里,你依然不能SSH远程连接Docker容器,还差最后一步:在Docker 容器内部装好Openssh-Server并开启就好了。
按照第一步重新安装好SSH服务,安装过程中可能不需要加sudo
了。
需要多说的一句话是,容器内可能什么都没有安装,要编辑ssh的信息,你可能需要现在容器内安装vim编辑器,,apt-get install vim
,另外,在最后配置SSH的时候,容器内的SSH服务,必须要添上这三种:
vim /etc/ssh/sshd_config 去掉 Port 22 前面的井号 去掉 ListenAddress 0.0.0.0 前面的井号 去掉 ListenAddress :: 前面的井号 去掉 PermitRootLogin yes 前面的井号 将 UsePAM yes 修改为 UsePAM no 1. 你docker映射的端口号:比如Port 8090 2. PermitRootLogin yes 3. RSAAuthentication yes (2和3放在一起就好了 3或者不放) 4. passwd
最后重启以下容器内的ssh服务,就可以实现远程访问啦!
另外,想要docker自启动之后,容器内的ssh服务也自动开启,可以将ssh开启的服务命令写入.bashrc 文件中省事, 也就是service ssh start 写入到.bashrc 文件中.
2. Docker书上提供的方案
(1) 首先安装openssh-server
apt-get install openssh-server
(2)安好之后,如果需要正常启动SSH服务,则目录 /var/run/sshd 必须存在。下面手动创建他,并启动ssh服务。
mkdir -p /var/run/sshd /usr/sbin/sshd -D &
此时,查看容器的22端口(SSH服务默认监听的端口),可见此端口已经处于监听状态:
netstat -tunlp apt-get install net-tools
加监听端口,可以参考第一个SSH配置中的内容(Port xxx)
修改SSH服务的安全登陆配置,取消pam登陆限制:
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
在root用户目录下创建.ssh目录,并复制需要登陆的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa命令生成)到authorized_keys文件中:
mkdir root/.ssh vim /root/.ssh/authorized_keys
创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:
vi /run.sh chmod +x run.sh
run.sh脚本内容:
#!/bin/bash /usr/sbin/sshd -D
最后,退出容器:exit
保存镜像:
将退出的容器用docker commit 命令保存为一个新的sshd:ubuntu的镜像。
docker commit fc1 sshd:ubuntu
这样就保存啦!
下次就可以使用这个镜像跑别的容器啦!
docker run -p 10022:22 -itd --name='xxx' sshd:ubuntu /run.sh
启动成功!
在宿主主机或者其他主机上,可以通过SSH访问10022端口来登陆容器!
有时候服务器端的开发环境配置好了,但SSH远程连接的时候没有办法进入Conda环境,显示“conda:未找到命令 ”。
只需要在SSH终端中输入:
echo 'export PATH="/opt/conda/bin:$PATH"'>>~/.bashrc source ~/.bashrc //设置CUDA的路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.1/lib64 export PATH=$PATH:/usr/local/cuda-11.1/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.1
就可以啦!
原文链接:https://blog.csdn.net/weixin_44345913/article/details/120388867