【Linux】docker安装centos8启动SSH服务并跨局域网连接

适用于基于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 {端口号},密码输入刚才设置的即可。

https://blog.csdn.net/qq_43827595/article/details/113810439

3 跨局域网远程连接docker的CentOS 8

前提(可有可无):下载tmux会话管理工具, yum install tmux或者dnf install tmux(仅限CentOS8)都可以,详细使用见下方参考链接。

https://www.ruanyifeng.com/blog/2019/10/tmux.html

简单使用:

# 新建会话
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

sakurafrp官网

  1. 在浏览器上,打开官网>创建隧道>节点选国内的(需要实名认证 花1¥)>隧道类型选TCP>端口填22(windows做远程桌面的时候需要写3389)>确认创建
  2. 在docker的CentOS8里面,参考sakurafrp的官网的软件下载那一栏安装软件,命令行输入bash <(curl -s https://getfrp.sh)>按提示即可,如果无法设置为系统服务的话不设置也不影响(一般docker容器都不能)
  3. 可以使用tmux设置会话 方式如上所述
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页