通过 SSH 打开的 shell 可以“继承”/使用与本地 shell 相同的环境吗? MacOS 上的非交互式 shell“有时”无法访问钥匙串

通过 SSH 打开的 shell 可以“继承”/使用与本地 shell 相同的环境吗? MacOS 上的非交互式 shell“有时”无法访问钥匙串

我用推子弹和一个第三方Python脚本这允许我从命令行发送“推送”。该脚本使用 MacOS“Keychain”来访问用于 Pushbullet 的密码和令牌。

如果我在本地执行脚本,类似

% pb push "SE demo"

工作正常,“推送”按预期发送,但我需要使用 ssh 将其从机器 A 发送到 B:

% ssh B pb push "SE\ demo"

但是当我这样做时,我得到脚本无法访问的回溯钥匙链。我可以通过首先解锁钥匙串来解决这个问题:

% security -i unlock-keychain

但每次你想发送推送时都必须这样做,这违背了钥匙串的目的。

本地 shell 和 ssh 之间的主要区别在于 ssh shell 是非交互式(如果我打开本地 shell 并且su得到未登录但交互式 shell - 在这样的 shell 中,它仍然可以发送这些推送/钥匙串没有问题)。

如何使用 ssh 访问本地交互式 shell 的环境,以便我的脚本可以访问钥匙串?

额外细节。我实际上正在做的是通过 SSH 运行 AppleScript:

% ssh B osascript ~/scripts/myscript

在此 AppleScript 的末尾,我执行一个发送此 Pushbullet 推送的 shell 脚本

do shell script "pb push 'done'"

正是这个命令失败了,因为它无法访问钥匙串。如果我从脚本编辑器或命令行在 B 上本地执行 AppleScript,则 do shell 脚本部分将起作用。 OTOH,AppleScript 报告其执行 do shell 脚本的环境是非交互式且非登录的。

相关内容