【问题标题】:How can I ssh into "Web App On Linux" docker container on Azure?如何通过 ssh 进入 Azure 上的“Linux 上的 Web 应用程序”docker 容器?
【发布时间】:2017-03-09 20:17:59
【问题描述】:

如何使用新的“Linux 上的 Web 应用”服务 ssh 进入容器?

它目前处于预览模式,我不确定它是否还不可能或者我已经监督了设置。

【问题讨论】:

  • 很确定你没有
  • 目前是不可能的。请参考这个feedback
  • 嗨@Walter-MSFT,谢谢您的回复,请像“回答”一样说明,所以我可以将其标记为已接受。

标签: linux azure docker azure-web-app-service


【解决方案1】:

这是我在 linux 容器中使用 ssh 和 asp.net 核心应用程序的示例:

Dockerfile

#base image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base

#ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

COPY MyApp/sshd_config /etc/ssh/
COPY MyApp/init.sh /usr/local/bin/

WORKDIR /app
EXPOSE 80 443 2222

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["MyApp/MyApp.csproj", "MyApp/"]
RUN dotnet restore "MyApp/MyApp.csproj"
COPY . .
WORKDIR "/src/MyApp"
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
    
ENTRYPOINT ["bash","init.sh"]

init.sh 在 .net 核心项目的根文件夹中

service ssh start
dotnet MyApp.dll

sshd_config 在 .net core 项目的根文件夹中

#
# /etc/ssh/sshd_config
#

Port            2222
ListenAddress       0.0.0.0
LoginGraceTime      180
X11Forwarding       yes
Ciphers                 aes128-cbc,3des-cbc,aes256-cbc
MACs                    hmac-sha1,hmac-sha1-96
StrictModes         yes
SyslogFacility      DAEMON
PrintMotd       no
IgnoreRhosts        no
#deprecated option 
#RhostsAuthentication   no
RhostsRSAAuthentication yes
RSAAuthentication   no 
PasswordAuthentication  yes
PermitEmptyPasswords    no
PermitRootLogin     yes

【讨论】:

  • 我无法使用这个和@augdog 的答案。应用服务无法运行 init,sh> 日志中的错误:OCI 运行时创建失败:container_linux.go:346:启动容器进程导致 \"exec:\\\"init.sh\\\":$ 中找不到可执行文件路径\":未知
【解决方案2】:

目前,这是不可能的。请参考这个feedback

2017 年 6 月 8 日更新

现在可以了,请参考SSH support for Azure Web App on Linux

【讨论】:

    【解决方案3】:

    截至今天(2019 年 4 月 1 日),可以根据此文档:Connect to Web App for Containers using。这是一种黑客行为,但它确实有效。

    不是愚人节的玩笑。

    【讨论】:

    • 这里的 SSH_PASSWD 是什么?是随机通行证还是登录凭据?
    【解决方案4】:

    我发现@Sgedda 的回复很有帮助。我完全按照他的例子,但我一直收到这个错误exec user process caused "exec format error"

    除了实现他的例子,我还做了以下

    1. init.sh 文件的第一行添加了#!/bin/bash。重要的是它的前面和该行的末尾都没有任何内容,并且它是文件中的第一行。 service ssh start 是第 2 行。
    2. 使用 VS Codeinit.shsshd_config 文件的编码更改为 ISO 8859-15
    3. 使用 VS Code 将 init.shsshd_config 文件的行尾更改为 LF

    【讨论】:

      【解决方案5】:

      如果有人对@sgedda 的回答有问题,就像@Manish Jain 一样,请尝试使用:

      ENTRYPOINT ["bash", "init.sh"]
      

      它对我有用。

      【讨论】:

        【解决方案6】:

        我不相信你可以。但是根据您想要做什么(例如查看日志文件),您可以使用 Kudu 中的 bash(通过高级工具 > 调试控制台 > Bash)

        也就是说,Linux 上的 Web 应用程序处于预览阶段 - 因此 SSH 可能在未来成为可能!

        【讨论】:

        • 你可以用容器本身对 bash 做任何事情,所以它的使用为 0
        猜你喜欢
        • 2020-06-16
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多