![通过 SSH 打开的 shell 可以“继承”/使用与本地 shell 相同的环境吗? MacOS 上的非交互式 shell“有时”无法访问钥匙串](https://linux22.com/image/231249/%E9%80%9A%E8%BF%87%20SSH%20%E6%89%93%E5%BC%80%E7%9A%84%20shell%20%E5%8F%AF%E4%BB%A5%E2%80%9C%E7%BB%A7%E6%89%BF%E2%80%9D%2F%E4%BD%BF%E7%94%A8%E4%B8%8E%E6%9C%AC%E5%9C%B0%20shell%20%E7%9B%B8%E5%90%8C%E7%9A%84%E7%8E%AF%E5%A2%83%E5%90%97%EF%BC%9F%20MacOS%20%E4%B8%8A%E7%9A%84%E9%9D%9E%E4%BA%A4%E4%BA%92%E5%BC%8F%20shell%E2%80%9C%E6%9C%89%E6%97%B6%E2%80%9D%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E9%92%A5%E5%8C%99%E4%B8%B2.png)
我用推子弹和一个第三方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 脚本的环境是非交互式且非登录的。