如何通过SSH连接到Node容器应用程序?

4

使用Docker运行Node应用程序时,我无法通过Azure门户网站的SSH访问它。我已添加了一个SSH配置文件,并且正在使用apk add openssh。即使没有添加添加SSH的命令,该应用程序也可以正常运行。不知道如何使其正常工作。在连接Azure时收到“连接被拒绝”的错误消息。

FROM node:14-alpine as builder
WORKDIR /app/

COPY package.json yarn.lock /app/

RUN yarn

ADD . .

RUN yarn build

FROM node:14-alpine as runner
WORKDIR /app/
ENV NODE_ENV=production

COPY --from=builder /app/build /app/
COPY --from=builder /app/package.json /app/yarn.lock /app/
COPY src/database/prisma/schema.prisma /app/prisma/

RUN yarn

COPY docker/sshd_config /etc/ssh/
RUN mkdir /var/run/sshd
RUN apk add openssh && echo "root:MyP@ssword1" | chpasswd

#EXPOSE 8080
#CMD node web_server/index.js
EXPOSE 8080 2222
CMD /usr/sbin/sshd &; node web_server/index.js

你在本地试过了吗?你暴露2222端口而不是SSH默认的22端口,可以吗? - boly38
根据 Azure 文档,2222 应该可以工作。https://learn.microsoft.com/en-us/azure/app-service/configure-custom-container?pivots=container-linux - Leonardo Wildt
它是在什么服务上运行的?虚拟机、容器实例、还是其他什么? - mmking
它正在运行在 Azure 应用服务中。 - Leonardo Wildt
1个回答

3

如果你的应用程序运行良好,尝试添加以下内容:

向存储库添加一个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

在你的Dockerfile中,尝试添加以下命令:

# ssh
COPY docker/sshd_config /etc/ssh/
RUN mkdir /var/run/sshd
RUN apk add openssh && echo "root:MyP@ssword1" | chpasswd

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

EXPOSE 8080 2222
CMD ["bash","init.sh"]

在您的项目根目录中添加init.sh文件。
#!/bin/bash
set -e
echo "Starting SSH ..."
service ssh start
node web_server/index.js

或者将您的最后一行代码更改为CMD ["/usr/sbin/sshd","-D", "node web_server/index.js"]

更多参考,请查看此处1此处2


这个之前是可以用的,但现在我收到了SSH CONNECTION CLOSE - Error: All configured authentication methods failedError: when i try and ssh的错误提示。 - Leonardo Wildt
2
最终使用了以下命令: COPY docker/sshd_config /etc/ssh/ RUN mkdir /var/run/sshd RUN apk add openssh && echo "root:myPassword1" | chpasswdCOPY init.sh /usr/local/bin/EXPOSE 8080 2222 RUN /usr/bin/ssh-keygen -A CMD /usr/sbin/sshd & node web_server/index.js - Leonardo Wildt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接