我正在尝试为远程开发工作区配置SSH身份验证,如documentation中所述:
{
"dockerfile": "Dockerfile",
"runArgs": [
// ...
"-v",
"${env:HOME}${env:USERPROFILE}/.ssh:/root/.ssh-localhost:ro"
],
"postCreateCommand": "echo \"copying ssh keys...\" && mkdir -p ~/.ssh && cp -r ~/.ssh-localhost/* ~/.ssh && chmod 700 ~/.ssh && chmod 600 ~/.ssh/*",
extensions: [
// ...
]
}
请注意,我已经在该行的开头添加了一个echo
语句,只是为了确保我知道它是否可以运行。除此之外,它与文档相同。
但是,看来postCreateCommand
从未运行过。如果查看Dev Containers终端的输出,我的docker exec
语句的预期copying ssh keys...
命令和echo
的输出都看不到,而容器内部的ls -a /root
则没有显示{ {1}}文件夹,但没有.ssh-localhost
文件夹。
我在日志中也没有看到错误消息。我尝试触发“远程开发:重建容器”,以及在重新加载窗口之前删除容器和图像,但是无论如何都会得到相同的结果。
我在这里缺少什么配置?
答案 0 :(得分:0)
已经有一段时间了,所以我不能100%地确定这是我的问题,但是与此同时,我正在努力使该配置启动并运行,我还尝试通过安装一个命名为~/.vscode-server
的卷。
对于这种特定用例,这似乎是一个“坏”主意,因为postCreateCommand
是否应该运行取决于该目录中是否存在标记文件(以及一两个级别)在文件树下)。因此,当我重新构建容器并重新启动“ VS Code”窗口时,该卷已重新安装到新容器中,并且标记文件已经存在,因此该命令未运行。
我发现,针对此问题的更好解决方案是将以下内容添加到您的Dockerfile中,而不要使用postCreateCommand
:
RUN echo "\n\nif [ -d ~/.bashrc.d ]; then\n for rc in ~/.bashrc.d/*rc; do\n . \$rc\n done\nfi\n" >> $HOME/.bashrc
其中$HOME
是/root
还是/home/$USER
,具体取决于您是否以root用户身份运行容器。
然后,使您可以将目录批量安装到~/.bashrc.d
位置,并且该目录中与*rc
匹配的每个文件都将作为配置文件脚本的一部分运行。可以将上面的SSH设置脚本放在一个sshrc
文件中,而用if [[ -d ~/.ssh ]]
包围,以避免每次都运行它。