暂时将 shell 设置传输到远程 ssh 会话?

暂时将 shell 设置传输到远程 ssh 会话?

我很好奇,我经常想在会话期间将所有 shell 设置(点文件)传输到远程会话,然后在注销时将其恢复。更好的方法是只在此会话中激活这些设置,以便其他登录的人也可以拥有 shell 的默认设置或他们自己的自定义设置。

目前有没有办法做到这一点,还是需要我自己编写一个自定义解决方案来实现此功能?我目前没有看到任何真正的选择来实现这一点。

答案1

您不需要编写太多内容(只需编写一个 shell 脚本)。工具已经存在。使用它们仅导出您需要的内容,以避免修复其他人的 shell 函数的负担。

(set; alias) |
ssh -l root 10.3.0.8 'mkdir ~/tmp 2>/dev/null; cat > ~/tmp/.import'

这不是故障安全的,因此您应该尝试输出直到您认为它正常工作。

(set; alias) > ~/tmp/import
bash -n tmp/import

tmp/import: line 6085: syntax error near unexpected token `('
tmp/import: line 6085: `        !(?(*/)python*([0-9.])|-?))'

对于仅有环境变量的情况来说这不是什么问题,因为可解析的格式很容易执行:

env | sed -Ee "
      s/'/\\\\'/g;
      s/=(.*)/='\1'/
      " > tmp/export.vars-only

并且可以像这样只导出您的函数。

declare -f `grep  ^function ~/.functions | awk '{print $2}'`

如果你使用moo() { true;}语法来声明它们或者其某种变体,你可以尝试grep -Eoe '^\w+' ~/.functions

答案2

根据您的具体需要,有几种解决方案。

  1. 如果您可以控制 openssh 服务器配置,您可以在服务器上设置 AcceptENV,然后客户端中的 SendENV 将发送特定的环境变量。

  2. 如果这还不够,并且您使用密钥验证,则可以使用authorized_keys条目来运行特定命令,例如加载您已经传输的设置文件。

  3. 如果这些都不适合您,那么您只需要使用设置环境的包装器来包装您的脚本/命令。

答案3

恐怕您必须编写一些自定义的东西......类似于针对所涉及的目录和文件的简单 cp 命令的东西。

相关内容