openssh SendEnv不工作时使用-J(跳转主机)?



Edit:在编辑/etc/ssh/sshd_config后重新启动ssh的提示解决了我的问题(Ubuntu上的sudo systemctl restart ssh.service),但请参阅接受的答案以获得更多有用的故障排除

原始:

我有一个服务器,我连接到一个跳转主机:

export MY_ENV=myvalue
ssh -o StrictHostKeyChecking=yes -o SendEnv=MY_ENV -J <myuser@jumpHostIp> <myuser@hostIp>

跳转主机和主机在/etc/ssh/sshd_config中都有:

AcceptEnv MY_ENV

跳转主机和主机在它们的/home/myuser/中都有。Ssh/authorized_keys限制myuser使用部署脚本的Ssh密钥:

command=/home/myuser/deploy.sh ...rest of public key...

在这个deploy.sh中我想使用$MY_ENV,但是它不起作用。

使用跳跃主机是否以某种方式降低了SendEnv传输的MY_ENV的值?如果是,这是有意的,或者我如何访问主机上的deploy.sh中的MY_ENV的值?

编辑:我精炼了我们在迭代过程中所考虑的细节,为了更好地通用,部分地命名了问题中已经命名的一些细节。


ssh的手册页显示:

请注意,命令行提供的配置指令通常适用于目标主机,而不是任何指定的跳转主机。使用~/。Ssh/config指定跳转主机的配置。

因此您的最终目的地将收到-o添加的选项。由于跳转主机不涉及这些选项,因此没有必要配置跳转主机以将变量传递到目标主机。

目标服务器上的sshd配置

作为先决条件,目的地-host的sshd服务必须配置为接受环境变量。允许使用通配符:

File:/etc/ssh/sshd_config

AcceptEnv MY_*

更改sshd_config后,sshd必须重新启动以读取更新的配置
(这个问题的解决方案…)

systemctl restart sshd

重新启动sshd(至少使用"openssh-server">

)时,当前连接将持续存在。

authorized_keys

为了限制目标系统上的密钥使用,可以在授权中添加一个选项。

文件:authorized_keys限制为命令

当省略包含command选项值的"引号时,整个PublicKey-Authentication将失败:

command=/home/user/deploy.sh ssh-rsa AAAAB3NzaC1yc2EAA...
# DEBUG response of sshd:
debug1: /home/user/.ssh/authorized_keys:1: bad key options: missing start quote

根据sshd_config中的设置返回到基于密码的身份验证,Permission denied (publickey).将分别遵循。

"引号是必需的,即使命令中没有空格:

command="/home/user/deploy.sh" ssh-rsa AAAAB3NzaC1yc2EAA...

客户端命令的详细信息

注意:除了命令行选项之外,这些细节可以在客户端用户的~/.ssh/config中配置。

要在命令行中将所需的变量作为选项传递,可以使用以下两种语法:

-o SendEnv=MY_ENV
-o "SendEnv MY_ENV"

请不要忘记"引号

对变量的可用性至关重要的不仅是设置它,还必须导出它:

这将失败:

MY_ENV="Value"
echo $MY_ENV
Value

…尽管变量显示在当前shell中。

要求:

export MY_ENV="Value"

相关内容

  • 没有找到相关文章

最新更新