![将 SSH 密钥限制为仅 SCP](https://linux22.com/image/704940/%E5%B0%86%20SSH%20%E5%AF%86%E9%92%A5%E9%99%90%E5%88%B6%E4%B8%BA%E4%BB%85%20SCP.png)
问题:
我没有服务器的 root 访问权限(即,我不能/不想更改任何系统范围的服务器配置),我想使用 scp 和备用标识文件(例如.ssh/id_rsa_for_scp
)自动从服务器下载某些文件,但我不想使用相同的钥匙用于通过 ssh 访问服务器。
答案1
将密钥文件复制到服务器后:
ssh-copy-id -i ~/.ssh/id_rsa_for_scp [email protected]
(为了简化示例,我们假设客户端的机器 ~/.ssh/config 已经配置好了。有关~/.ssh/config
运行的更多详细信息man ssh_config
)
Host testmachine
Hostname 192.168.1.1
User legendaryuser
BatchMode yes
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa_for_scp
您将需要编辑服务器的/home/legendaryuser/.ssh/authorized_keys
文件。
从:
ssh-rsa AAAAAC3nZCXExxHUEBR...
致:(此版本允许下载和上传)
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...
如果您想要将 scp 限制为“仅下载模式”并且仅限于特定目录中的文件,请执行以下操作:
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...
最后,为了安全起见,让我们对密钥添加一些限制:
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo ERRO Access Denied; fi",no-pty,no-port-forwarding,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAAC3nZCXExxHUEBR...
您可以authorized_keys
通过运行以下命令查看有关该文件的更多详细信息:
man sshd
附言:您还可以添加from=xxx.xxx.xxx.xxx
对来自特定IP地址或网络的密钥的使用限制。
Pps:抱歉,我的英语不是母语人士。
答案2
补充@Michael Richard 的回答。
zsh 将返回错误:
zsh:1: no such file or directory: scp ...
该问题在bash中也存在。
为了解决这个问题,更换
... then $SSH_ORIGINAL_COMMAND ; ...
到
... then $SHELL -c $SSH_ORIGINAL_COMMAND ; ...