在 ssh 中使用 authorized_keys 命令会破坏 scp

在 ssh 中使用 authorized_keys 命令会破坏 scp

我想使用每个键的命令授权密钥设置一些环境变量。

command="MYVAR=test $SHELL" ssh-rsa mykey

Shell 工作正常,但 scp 不工作。

设置每个密钥的环境变量且不中断 ssh 文件传输的正确方法是什么?

答案1

您的配置强制 ssh 在您使用匹配的私钥连接时运行其中的任何命令$SHELL。如果您想要的是交互式 shell,那么这没问题,但会破坏直接运行命令的任何尝试。如您所见,这会破坏 `scp,但也会破坏以下内容:

ssh myhost uptime

解决方案是(a)在其他地方设置环境变量(.ssh/rc或仅使用标准 shell 初始化文件),或(b)当您想要通过文件强制执行命令时使用专用键authorized_keys

答案2

所以我意识到这个问题现在已经过时了,但我今天找到了答案。这是设置环境变量的替代方法,根据您的情况,这可能是更好的解决方案。我的情况是这样的:

我有一个 Splunk 实例,它启动到远程主机的 SCP 和 SSH 会话。通过 SCP 发送电子邮件列表,然后使用 SSH 在远程系统上运行脚本以对该电子邮件列表采取行动。这是我的 authorized_keys 文件的顶部:

command="/home/username/wrapper.sh",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3 etc...

这是我的wrapper.sh脚本:

#!/bin/bash

vars=( $SSH_ORIGINAL_COMMAND )
case "${vars[0]}" in
        "/home/username/scripts/myscript.py")
                /home/username/scripts/myscript.py ${vars[1]}
                exit 0
                ;;
        "scp")
                scp -t ${vars[2]}
                chmod 644 ${vars[2]}
                exit 0
                ;;
        *)
                exit 1
                ;;
esac

第一种情况允许 /home/username/scripts/myscript.py 使用传递给它的任何命令行参数。第二种情况,scp 情况条目,允许将传入文件写入磁盘的预期位置。

此方法允许我将公钥的使用限制为 1 个命令,同时仍允许 scp。如果有人有更好的选择,请分享。:)

相关内容