每次从一台机器 ssh 到另一台机器后,如何执行命令?
例如
ssh mymachine
stty erase ^H
我宁愿每次在我的 ssh 连接完成后都执行“stty erase ^H”。
该命令不能简单地进入我的 .zshrc 文件。即对于本地会话,我无法运行命令(它搞砸了我的键绑定)。但我需要它为我的远程会话运行。
每次从一台机器 ssh 到另一台机器后,如何执行命令?
例如
ssh mymachine
stty erase ^H
我宁愿每次在我的 ssh 连接完成后都执行“stty erase ^H”。
该命令不能简单地进入我的 .zshrc 文件。即对于本地会话,我无法运行命令(它搞砸了我的键绑定)。但我需要它为我的远程会话运行。
将命令放入~/.ssh/rc
你可以把这样的东西放到你的 shell 的启动文件中:
if [ -n "$SSH_CONNECTION" ]
then
stty erase ^H
end
-n
测试将确定是否SSH_CONNECTION
设置了仅在通过 SSH 登录时发生的设置。
如果你用 shell 登录到 *nix 盒子,为什么不把它放在你的 shell 启动中呢?
.bashrc
或.profile
在大多数情况下。
假设一个 linux 目标,把它放在你的.profile
尝试在 ~/.bashrc 末尾添加命令。它应该在注销时退出。您是否希望仅在注销 ssh 会话时执行此命令?本地会话等呢?
trap 'stty erase ^H; exit 0' 0
您可能也可以使用相同的模式从 /etc/profile 设置一个 .logout 文件。
屏幕/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
请注意,我还添加了exit
after byobu
,因为 IMO 如果您首先使用 byobu,您通常不想在它之外做任何事情。