![](/img/trans.png)
[英]How to SSH into docker container by a non-root user of that container?
[英]How to give a Openshift container's unprivileged user read access to /root/.ssh for spring cloud config server SSH authentication?
我想通过 Spring 启动云配置服务器使用 SSH 身份验证。 到目前为止,我一直在 docker 集群上的 docker 容器中运行配置服务器,没有任何问题。
我的组织最近决定将所有内容移至 Openshift 3。我正在尝试部署配置服务器,但是我遇到了使用 SSH 对 Gitlab 进行身份验证的问题。 在 docker 映像中,我在将公共和私有 SSH 密钥复制到 /root/.ssh 之前使用过,它可以工作,但它在我生成的 S8 中的 Openshift 上不起作用。
在 Openshift 中,我创建了一个名为cfgssh
的通用 kubernetes 密钥,它由 id_rsa 和 id_rsa.pub 密钥(base64 编码)组成,然后我将密钥安装到 /root/.ssh 在我的部署配置/容器中。 这不起作用我猜用户运行应用程序时没有对 /root/.ssh 的读取访问权限? 这总是以 configServer 在身份验证异常后崩溃而告终。
我能够在本地和 docker swarm 上运行 spring 云配置服务器,而没有任何身份验证问题,因此这绝对不是云配置服务器配置问题。
有没有其他人遇到/找到解决这个问题的方法?
我的配置如下。
Maven fabric8部署片段:
spec:
replicas: 4
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: qa
volumeMounts:
- name: cfgssh
mountPath: ~/.ssh
readOnly: true
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTPS
initialDelaySeconds: 180
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTPS
initialDelaySeconds: 60
timeoutSeconds: 5
resources:
requests:
memory: "64Mi"
limits:
memory: "256Mi"
env:
- name: JAVA_OPTIONS
value: "-Xms64M -Xmx256M"
volumes:
- name: cfgssh
secret:
secretName: cfgssh
items:
- key: id_rsa
path: id_rsa
- key: id_rsa.pub
path: id_rsa.pub
假设它在容器中使用 ssh 客户端(您没有指定您正在使用的图像),我的猜测是您运行的任何用户都不是root
。 您可以通过执行来检查容器的默认用户是什么
$ kubectl exec -it <pod-name> -c <container-name> sh
$ whoami
话虽如此,安装在~/.ssh
上应该可以工作(您在执行到 pod/容器时检查)。 所以我认为你可能对你的id_rsa
文件有错误的权限。 (他们需要是0600
)。 确保在您的volumes
部分:
volumes:
- name: cfgssh
secret:
secretName: cfgssh
defaultMode: 0600 <= add this
items:
- key: id_rsa
path: id_rsa
- key: id_rsa.pub
path: id_rsa.pub
参考: 机密文件权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.