适用于基于Docker的人工智能开发平台,或者容器内不能使用service、systemctl的情况(不能以docker run方式启动容器)
1.前言
# 能够docker run启动容器的建议加一个--privileged 这样就可以在容器内使用systemctl进行服务的启停操作
docker run -itd --privileged centos /usr/sbin/init
# 安装镜像的命令
docker pull centos:centos8
2.配置
2.1 基础包的安装
# 由于pull的centos是最小化的,因此需要安装一些必要的包
# centos8yum和dnf并存,dnf是yum的下一代包管理软件,因此下文的yum都可以用dnf试一试
yum install -y openssh-server
yum install -y openssh-clients # 安装了这个之后再命令行输入ssh就不会提示‘command not found’
yum install -y initscripts # 这个是能够在容器里面运行service命令
yum install -y net-tools.x86_64
yum install -y vim
yum install -y paawd
2.2 ssh的配置
vim /etc/ssh/sshd_config
# 确保
## PermitRootLogin yes
2.3 启动SSH服务
因为不能使用service启动服务,会报错:
Redirecting to /bin/systemctl start sshd.service
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
因此采用手动启动,方式如下:
mkdir -p /var/run/sshd
/usr/sbin/sshd -D &
若报错:
Unable to load host key: /etc/ssh/ssh_host_rsa_key
Unable to load host key: /etc/ssh/ssh_host_ecdsa_key
Unable to load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
则输入:
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
/usr/sbin/sshd -D & # 此时应该不会报错
再输入netstat -apn | grep ssh
,则显示:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 599/sshd
tcp6 0 0 :::22 :::* LISTEN 599/sshd
再输入:passwd
设置你想要的密码
这时就可以通过SSH进行连接这个容器(客户端(如windows)仍然需要安装SSH)
在客户端的terminal里输入ssh root@{容器的IP} -p {端口号}
,密码输入刚才设置的即可。
3 跨局域网远程连接docker的CentOS 8
前提(可有可无):下载tmux会话管理工具, yum install tmux
或者dnf install tmux(仅限CentOS8)
都可以,详细使用见下方参考链接。
简单使用:
# 新建会话
tmux new -s test
# 进入会话
tmux attach -t test
# 进入之后可以进行操作 按Ctrl+B,再按D退出
# 查看当前建立的会话(在正常的shell里面输入)
tmux ls
# 杀死会话
tmux kill-session -t test
3.1 方式1:ngrok
注册账号并下载所匹配的安装包(只有命令行的linux系统可以ssh远程的登录然后使用Xtfp7进行文件的传输,下载链接见Xftp7家庭和学校免费授权官方正版)
进入到ngrok压缩包所在目录:
unzip ngrok-stable-linux-amd64.zip
tmux new -s ngrok
tmux attach -t ngrok
# 进入到ngrok所在目录
# 链接你的ngrok账户(其中有个密钥)
./ngrok authtoken {密钥}
./ngrok tcp 22 # tcp可以用于SSH远程登录
# 成功之后会显示如下内容, Ctrl+B,D退出会话
ngrok by @inconshreveable
Session Status online
Account {这里是账户名} (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding tcp://0.tcp.ngrok.io:{端口号} -> localhost:22
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
之后就可以在另一台电脑使用ssh root@0.tcp.ngrok.io -p {端口号}
连接了。
但是,ngrok是国外服务器,因此速度较慢,所以连接上能明显感受到延迟 此处推荐sakurafrp,可以选国内节点,速度快。
3.2 方式2:sakurafrp
- 在浏览器上,打开官网>创建隧道>节点选国内的(需要实名认证 花1¥)>隧道类型选TCP>端口填22(windows做远程桌面的时候需要写3389)>确认创建
- 在docker的CentOS8里面,参考sakurafrp的官网的软件下载那一栏安装软件,命令行输入
bash <(curl -s https://getfrp.sh)
>按提示即可,如果无法设置为系统服务的话不设置也不影响(一般docker容器都不能) - 可以使用tmux设置会话 方式如上所述