在ssh中使用命令authorized_keys打破scp

我想使用authorized_keys中的每个键的命令来设置一些环境variables。

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

shell工作正常,但SCP不起作用。

什么是正确的方法来设置每个键的环境variables,而不是破坏SSH文件传输?

只要您使用匹配的私钥连接,configuration就会强制ssh运行$SHELL任何命令。 这很好,如果你想要的是一个交互式的shell,但会打破任何直接运行命令的企图。 这就像你看到的那样打破了scp,但是也会破坏如下的东西:

 ssh myhost uptime 

解决方法是(a)将环境variables设置在别的地方( .ssh/rc ,或者只是使用标准的shell初始化文件),或者(b)当你想通过authorized_keys文件强制执行命令时使用专用的键。

所以我意识到这个问题在这个时候是古老的,但我今天发现了一个答案。 这是设置环境variables的替代方法,根据您的情况可能是更好的解决scheme。 我的情况是这样的:

我有一个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 / script / m脚本.py与任何传递给它的命令行参数。 第二个,scp大小写的项目,允许传入的文件被写到磁盘的预定位置。

这个方法允许我将公钥的使用限制为1个命令,并且仍然允许scp。 如果有人有更好的select,请分享。 🙂