我正在尝试ssh到Azure应用服务的容器中。我已按照此处配置容器的说明进行操作:
https://learn.microsoft.com/en-gb/azure/app-service/containers/configure-custom-container#enable-ssh
以及此处的连接说明:
https://learn.microsoft.com/en-gb/azure/app-service/containers/app-service-linux-ssh-support
以下是我的 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 "root:Docker!" | chpasswd
EXPOSE 8000 2222
COPY sshd_config /etc/ssh/
CMD ./bin/start.sh
start.sh 启动的位置运行服务 SSH 启动。sshd_config文件是
# This is ssh server systemwide configuration file.
#
# /etc/sshd_config
Port 2222
ListenAddress 0.0.0.0
LoginGraceTime 180
X11Forwarding yes
Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-sha1-96
StrictModes yes
SyslogFacility DAEMON
PasswordAuthentication yes
PermitEmptyPasswords no
PermitRootLogin yes
Subsystem sftp internal-sftp
当我尝试从门户通过 ssh 连接时,它首先说"CONNECTED | CREDENTIALS"
然后在 30 秒左右后它说"SSH CONNECTION CLOSE - Error: connect ECONNREFUSED <ip>:2222"
不知道为什么这没有连接?
修复我的错误的是指定了 sshd 所需的缺少运行时目录。对于 debian Linux 发行版,我必须创建/run/sshd
目录。另一件重要的事情是完全启动sshd
守护进程对我来说是/usr/sbin/sshd
Dockerfile
FROM nginx:latest
RUN apt-get update && apt-get install -y ssh
RUN echo "root:Docker!" | chpasswd
RUN mkdir /run/sshd
WORKDIR /app
COPY startup.sh /app
COPY sshd_config /etc/ssh/
EXPOSE 80 2222
CMD /app/startup.sh
/app/startup.sh
#!/bin/sh
echo "Start sshd"
/usr/sbin/sshd
echo "Start nginx"
nginx -g "daemon off;"
sshd_config
Port 2222
ListenAddress 0.0.0.0
LoginGraceTime 180
X11Forwarding yes
Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-sha1-96
StrictModes yes
SyslogFacility DAEMON
PasswordAuthentication yes
PermitEmptyPasswords no
PermitRootLogin yes
Subsystem sftp internal-sftp
要验证您是否可以通过 ssh 进入容器,请运行此命令
# Password: Docker!
$ ssh root@IP_OF_CONTAINER -p 2222
# Debug
ssh root@172.17.0.26 -p 2222 -vvvv
好的,刚刚让它工作,似乎把#!/bin/bash放在 start.sh 的顶部