我正在开发一个项目,在容器中运行一些独立的应用程序。我想让某些人通过 SSH 访问特定容器。到目前为止,我已经能够通过添加以下内容来使其工作/etc/ssh/sshd_config
:
Match User tester
ForceCommand docker exec -it mycontainer /bin/sh
AuthorizedKeysFile /opt/tester_keys
只要用户tester
存在于主机操作系统上并且具有执行权限,此操作就有效docker exec
。如果我Match User
在主机操作系统上输入一个不存在的用户的条目,那么它不起作用:
Match User nottester
ForceCommand docker exec -it nottestercontainer /bin/sh
AuthorizedKeysFile /opt/nottester_keys
在我得到的日志中Invalid user nottester from xxx.xxx.xxx.xxx port 35703
。
有没有办法sshd
仅使用授权密钥进行身份验证?
主机操作系统是 Ubuntu 22.04 LTS 服务器
最后我更喜欢以下内容:
- 用户连接
nottester
到服务器 - 使用提供的验证访问
AuthorizedKeysFile
- 如果授予访问权限,则将以有权执行此操作的
ForceCommand
用户身份执行container_admin
这可以完成sshd
还是我需要其他东西来处理这个问题?
答案1
ssh 服务需要系统已知的用户帐户以进行身份验证。这是没有商量余地的:目标账户必须存在于远程系统上。在您的示例中,这是nottester
.
现在让我们再看看您的要求:
- 用户作为 nottester 连接到服务器
- 使用提供的 AuthorizedKeysFile 验证访问权限
- 如果授予访问权限,ForceCommand将以用户container_admin身份执行
在客户端,指定nottester
要连接的用户帐户:
ssh nottester@remoteserver ...
或者将其添加到客户端~/.ssh/ssh_config
配置/首选项文件中:
Host remoteserver
User notttester
IdentityFile my_privatekey_for_remoteserver_ed25519.key
这样您就不需要记住用户帐户:
ssh remoteserver
在服务器端,您似乎已经将其设置为允许来自此用户帐户的连接并强制执行命令。