7

每次从一台机器 ssh 到另一台机器后,如何执行命令?

例如

ssh mymachine
stty erase ^H

我宁愿每次在我的 ssh 连接完成后都执行“stty erase ^H”。

该命令不能简单地进入我的 .zshrc 文件。即对于本地会话,我无法运行命令(它搞砸了我的键绑定)。但我需要它为我的远程会话运行。

4

6 回答 6

12

将命令放入~/.ssh/rc

于 2008-11-14T03:13:32.633 回答
7

你可以把这样的东西放到你的 shell 的启动文件中:

if [ -n "$SSH_CONNECTION" ]
then
  stty erase ^H
end

-n测试将确定是否SSH_CONNECTION设置了仅在通过 SSH 登录时发生的设置。

于 2008-11-14T03:00:26.310 回答
1

如果你用 shell 登录到 *nix 盒子,为什么不把它放在你的 shell 启动中呢?

.bashrc.profile在大多数情况下。

于 2008-11-14T02:43:04.237 回答
0

假设一个 linux 目标,把它放在你的.profile

于 2008-11-14T02:41:27.267 回答
0

尝试在 ~/.bashrc 末尾添加命令。它应该在注销时退出。您是否希望仅在注销 ssh 会话时执行此命令?本地会话等呢?

trap 'stty erase ^H; exit 0' 0

您可能也可以使用相同的模式从 /etc/profile 设置一个 .logout 文件。

于 2008-11-14T03:05:59.917 回答
0

屏幕/byobu 用户对我们的回答:

geocar 的解决方案将不起作用,因为屏幕会抱怨“必须连接到终端。”。(这可能是因为 .ssh/rc在shell 启动之前被处理。请参阅LOGIN PROCESS部分man 8 sshd)。

Robert 的解决方案在这里更好,但由于 screen 和 byobu 打开了它自己的 bash 实例,我们需要避免无限递归。所以这里是调整 byobu 友好版本:

## RUN BYOBU IF SSH'D ##
## '''''''''''''''''' ##
# (but only if this is a login shell)

if shopt -q login_shell
then
    if [ -n "$SSH_CONNECTION" ]
    then
        byobu
        exit
    fi
fi

请注意,我还添加了exitafter byobu,因为 IMO 如果您首先使用 byobu,您通常不想在它之外做任何事情。

于 2012-12-10T17:46:03.897 回答