远程连接Windows Docker之SSH免密登录

Docker 专栏收录该内容
2 篇文章 0 订阅

前言

上一篇我们讲到如何利用dockertls来进行Windows docker的远程连接,这一篇就来介绍下,利用SSH来进行Windows docker container的远程登录连接。SSH一般是应用在Linux的一种远程连接,在Linux Docker下也是一个远程连接container的非常通用的方式,而SSH和Windows嘛,总是让人觉得很不搭,所以网上基本上搜不到SSH远程连接方式应用在Windows Docker上,当时我也是走了一条血路啊,在此要记录下我这神奇的feature。

Docker Image

默认你已经安装好了Docker on Windows,这里就不详细讲解如何在Windows上安装docker了。如果你需要远程登录到docker container里面的时候,这个container当然是需要支持SSH的,我这里利用的base image是从docker hub上找到的dinorg/ssh。当然你要自己build一个也可以,base image选择windows server core,然后安装好SSH service。start你的container。

SSH免密登录

  • 首先,启动container,然后在启动ssh service之前,进入到container用powershell执行(对应的路径都是基于dinorg/ssh的image),这是用来允许SSH通过秘钥的方式登录的:
C:\ProgramData\ssh\logs> (get-content C:\ProgramData\ssh\sshd_config).replace('#SyslogFacility AUTH','SyslogFacility
LOCAL0')|set-content C:\ProgramData\ssh\sshd_config
  • 然后生成公钥和私钥用来SSH免密登陆的,依然是在container里面来操作。以下是一段启动ssh并生成key的脚本:
@echo off
powershell start-service sshd
:: start sshd service
net start sshd
:: generate ssh key-pair
if not exist C:\Users\Administrator\.ssh (
    md C:\Users\Administrator\.ssh
)
C:\OpenSSH-Win64\ssh-keygen.exe -t rsa -f C:\Users\Administrator\.ssh\${your_id} -N ""
  • 把生成的公钥写入到文件authroized_keys,并且保证写入的是Utf8NoBomEncoding的格式,这点非常的重要!
    C:\OpenSSH-Win64\ 这个是image里面的SSH的安装路径,里面有FixHostFilePermissions.ps1,是用来修改.ssh和authorized_keys的访问权限的。
Get-Content C:\Users\Administrator\.ssh\${your_id}.pub | Set-Content C:\Users\Administrator\.ssh\authorized_keys;
powershell -ExecutionPolicy Bypass 'C:\OpenSSH-Win64\FixHostFilePermissions.ps1 -Confirm:$false'
  • 然后就是最关键的一步骤,执行Enable-LocalUser -Name ‘Administrator’,如果没有这一步,你就不能用Administrator这个user来进行远程登录。这就是Windows docker image的神奇之处,这个坑我也是躺在里面好久才爬出来。

  • 最后就是在你的本地机器上,拿着之前生成的秘钥,通过Administrator这个user,来进行免密登录了。

注意事项

  • 防火墙设置,主要打开container的端口访问权限
  • 如果遇到了访问权限的问题,就去看看你的authorized_keys,这是很常见的问题,Windows的文件权限管理和Linux不一样,需要有类似700的权限设置

参考

https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse

  • 8
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值