You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置SSH密钥仅用于SCP,而SSH登录仍需密码验证

如何配置SSH密钥仅用于SCP,而SSH登录仍需密码验证

别担心,这个需求其实很好实现,核心就是给你那对免密的SSH密钥加个「命令白名单」——让它只能用来执行SCP相关的命令,直接SSH登录的话就拒绝。具体操作步骤我给你理清楚:

  1. 先登录到你的目标服务器(不管是用现在的免密SSH,还是输密码登录都行)。

  2. 找到服务器上的~/.ssh/authorized_keys文件,用你习惯的编辑器打开它,比如nano ~/.ssh/authorized_keys。

  3. 找到你之前通过ssh-copy-id传过来的公钥条目(就是以ssh-rsa或者ssh-ed25519开头的那一行),在这一行的最前面加上这段限制代码:

    command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp\ -(t|f)\ .*$ ]]; then $SSH_ORIGINAL_COMMAND; else echo 'Only SCP operations are allowed with this key' >&2; exit 1; fi" 
    

    注意要和后面的公钥内容连在一起,中间留个空格就行,最终的行看起来大概是这样:

    command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp\ -(t|f)\ .*$ ]]; then $SSH_ORIGINAL_COMMAND; else echo 'Only SCP operations are allowed with this key' >&2; exit 1; fi" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
    
  4. 保存文件并退出编辑器,注意:一定要确保~/.ssh目录的权限是700,authorized_keys文件的权限是600(如果不是的话,执行chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys来调整,不然SSH会因为权限过于开放而忽略这个密钥的限制配置)。

现在你可以测试一下效果了:

  • 尝试用这个密钥直接SSH登录服务器,应该会收到提示「Only SCP operations are allowed with this key」然后被踢出来,这时候你就只能用密码登录SSH了。
  • 再用SCP传文件,比如scp local_file user@server:/target/path,应该还是能正常免密传输,完全不受影响。

如果你想更严格一点,比如限制SCP只能访问某个特定目录,还可以把判断条件改得更具体。比如只允许往/home/youruser/transfer_files目录传东西,那把command里的正则改成^scp\ -t\ /home/youruser/transfer_files/.*$就行,这样用这个密钥连其他目录的SCP也会被拒绝,安全性更高。

备注:内容来源于stack exchange,提问作者KT_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:24:51