V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
awanganddong
V2EX  ›  程序员

请教大家一个 docker ssh 的问题

  •  
  •   awanganddong · 2023-03-08 10:22:00 +08:00 · 1938 次点击
    这是一个创建于 618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在用 docker 部署 Jenkins

    需要容器内 jenkins 与其他内网服务器通信。但是现在和宿主机不共用 ssh 。

    这中间的连通想问下大家该怎么解决。

    22 条回复    2023-03-13 19:17:38 +08:00
    dode
        1
    dode  
       2023-03-08 10:24:51 +08:00
    插两个网线可以吗
    leimao
        2
    leimao  
       2023-03-08 10:31:24 +08:00
    无脑一点的是 --network host ,不晓得有没有用
    hhjswf
        3
    hhjswf  
       2023-03-08 10:32:32 +08:00
    @leimao 不行吧,创建一个网络前提是本来就互通的
    leimao
        4
    leimao  
       2023-03-08 10:32:55 +08:00
    > 但是现在和宿主机不共用 ssh 。
    你意思说别的机器也要 SSH 到 Docker container 里面吗?
    hhjswf
        5
    hhjswf  
       2023-03-08 10:32:58 +08:00
    Jenkins 为啥不部署到内网
    SKYNE
        6
    SKYNE  
       2023-03-08 10:35:05 +08:00
    OP 指的是 ssh 免密登录其他内网的主机吧
    leimao
        7
    leimao  
       2023-03-08 10:36:17 +08:00
    虽然我不是这方面专家,但是我感觉可以在 host 上专用一个 port map 给 Docker container ,然后这个 port 就用来和其他的 node 通信。
    leimao
        8
    leimao  
       2023-03-08 10:37:33 +08:00
    很多年前,我就是 SSH 到一个部署在 Docker 里的 TensorBoard 看模型训练的:
    https://leimao.github.io/blog/TensorBoard-On-Docker/
    leimao
        9
    leimao  
       2023-03-08 10:38:44 +08:00
    虽然有几年没做这个了,生疏了,但感觉你做的 Jenkins 这些东西可以用一样的原理解决问题。
    awanganddong
        10
    awanganddong  
    OP
       2023-03-08 10:40:46 +08:00
    @SKYNE 对的,就是我现在需要从宿主机发代码到其他内网服务器。但是没法配免密登陆。

    @leimao 可以了。
    kd9yYw2RyhQwAwzn
        11
    kd9yYw2RyhQwAwzn  
       2023-03-08 10:52:58 +08:00
    把私钥做个挂载进容器内呢
    cxtrinityy
        12
    cxtrinityy  
       2023-03-08 11:01:04 +08:00 via Android
    通过宿主机 ssh tunnel 中转 ssh -L/-R 看看
    awanganddong
        13
    awanganddong  
    OP
       2023-03-08 11:03:14 +08:00
    @kd9yYw2RyhQwAwzn 我试下这个
    @leimao @cxtrinityy 这种感觉做映射比较复杂,因为我需要借助 jenkis 插件。

    实在不行我就直接编译安装了。
    julyclyde
        14
    julyclyde  
       2023-03-08 12:33:46 +08:00
    这就是典型的
    因为用 docker 而带来的额外问题

    不用 docker 的话就没这破事了
    DigitalG
        15
    DigitalG  
       2023-03-08 13:54:25 +08:00
    可以在镜像内固定挂载 SSH_AUTH_SOCK 文件和环境变量?
    awanganddong
        16
    awanganddong  
    OP
       2023-03-08 15:19:26 +08:00
    version: '3.1'
    services:
    jenkins:
    image: jenkinsci/blueocean
    user: root
    privileged: true
    container_name: jenkins
    volumes:
    - /usr/local/src/jenkins/jenkins_home:/var/jenkins_home
    - /var/run/docker.sock:/var/run/docker.sock
    - /home/ubuntu/.ssh:/root/.ssh/ #/var/jenkins_home/.ssh/
    ports:
    - 8080:8080
    - 50000:50000
    restart: always

    这是我的 docker-compose

    在容器内通过 ssh 可以访问远端服务器

    但是通过 ssh Publish Over SSH 就一直失败。

    报错内容添加 key 失败,该密钥格式我还没试。

    现在先编译安装一个看看问题是什么
    1point
        17
    1point  
       2023-03-08 15:23:15 +08:00
    ssh -i $pem -p 22 -o StrictHostKeyChecking=no
    把 pem 复制进去就可以了。我们 jenkins 也是跑在 docker 上的
    awanganddong
        18
    awanganddong  
    OP
       2023-03-08 22:51:47 +08:00
    我理解错了,
    jenkins 容器是可以直接和远程服务器进行通信的。


    1.在 Configure System 设置的主目录下直接生成公私钥:
    ssh-keygen -m PEM -t rsa -b 4096

    2.然后把私钥地址添加到 Publish over SSH 的 Path to key:
    /var/jenkins_home/.ssh/id_rsa

    3.SSH Servers 添加 远程地址

    4.把生成的公钥添加到远程服务器的 authorized_keys 中。


    谢谢大家了
    awanganddong
        19
    awanganddong  
    OP
       2023-03-08 22:52:23 +08:00
    docker-compose 这样配置就可以

    version: '3.1'
    services:
    jenkins:
    image: jenkinsci/blueocean
    container_name: jenkins
    privileged: true
    user: root
    volumes:
    - /data/jenkins/:/var/jenkins_home
    - /var/run/docker.sock:/var/run/docker.sock
    ports:
    - 8080:8080
    - 50000:50000
    restart: always
    awanganddong
        20
    awanganddong  
    OP
       2023-03-13 10:51:45 +08:00
    再次更新,
    jenkins 不建议用 root 权限去启动,存在的问题就是 root 的.ssh 与 jenkins .ssh 不在同一个目录下,

    而容器启动后是以 jenkins 用户来操作的。
    所以存在以上的问题。
    awanganddong
        21
    awanganddong  
    OP
       2023-03-13 18:35:35 +08:00
    生成适合 jenkins 的公私钥

    ssh-keygen -t rsa -b 4096 -m PEM

    移动到容器内
    cp -r /home/ubuntu/.ssh /data/jenkins/
    awanganddong
        22
    awanganddong  
    OP
       2023-03-13 19:17:38 +08:00
    还有一个问题是 git 插件问题。
    我登录 jenkins 往 known_hosts 写值无效

    只能把 ssh 设置成宽松模式
    /etc/ssh/ssh_config

    Host *
    StrictHostKeyChecking no
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:36 · PVG 04:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.