我有一个简单的问题,需要通过 ssh 执行导出命令,然后保持登录状态,但我遇到了一些麻烦。虽然出于多种原因,我对这个问题的解决方案很感兴趣,但主要原因是我可以自定义将终端选项卡设置为我选择的名称。
这是我迄今为止的命令:
ssh -t root@somehost "export PROMPT_COMMAND=''; echo -ne '\033]0;MY_TAB_NAME'; echo -ne '\007'; /bin/bash -i"
这真是太神奇了,我想我差不多就做到了。-t 选项打开一个 pty(伪终端),而 /bin/bash -i 打开一个交互式 bash 会话(因此在执行 ssh 命令后保持登录状态)。export 命令只是清除提示符,以便以下 echo 重命名它。
我遇到的问题是导出似乎没有在正确的 shell 中执行。我想我错过了一些非常简单的东西。
此外,我试图使它完全基于命令行,而无需使用各种 .bash 文件。我连接了数百台服务器,并且有一种简单的方法可以标记所有连接,但只需要某种方法来自定义终端中每个选项卡的名称(Mac OS X,如果有更简单的解决方案,愿意使用 iTerm)。
谢谢!
答案1
也许您应该考虑使用~/.ssh/environment
或environment
选项~/.ssh/authorized_keys
。sshd(8)
有关详细信息,请参阅手册页。
答案2
ssh host -t VAR=VALUE bash --login
答案3
我有一个简单的问题,需要通过 ssh 执行导出命令,然后保持登录状态 [...]
仅解决您的主要问题,无需深入研究其他问题。如果您想导出一些变量(或其他环境内容),您可以使用env
。
该env
命令可让您在修改后的环境中运行程序。因此,您可以bash -i
随意使用它在远程服务器中运行修改的环境。
我只举一个例子:
hmontoliu@laptop:~$ ssh -t remoteuser@remoteserver env EXPORTEDSTUFF='foo' MOREXPORTEDSTUFF='bar' bash -i
remoteuser@remoteserver's password:
remoteuser@remoteserver:~$ echo $EXPORTEDSTUFF
foo
remoteuser@remoteserver:~$ echo $MOREXPORTEDSTUFF
bar
检查 env 的手册页
高血压