只限制SSH密钥给SCP

问题:

我没有对服务器的根访问权限(即,我不能/不想更改任何系统.ssh/id_rsa_for_scp服务器configuration),并且我希望使用带有备用身份文件的scp(例如, .ssh/id_rsa_for_scp )来自动从服务器上下载一些文件,但我不希望使用相同的密钥通过ssh访问服务器。

将密钥文件复制到服务器之后:

 ssh-copy-id -i ~/.ssh/id_rsa_for_scp [email protected] 

(为了简化这个例子,我们将假设客户端的机器〜/ .ssh / config已经被configuration了,关于~/.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 

Ps:您还可以from=xxx.xxx.xxx.xxx添加到从特定IP地址或networking使用密钥的限制。

PPS:对不起我的英文,我不是母语的人。