SSH参数忽略.bashrc脚本


8

我有一台服务器,当它启动时,其中的一行会.bashrc执行以下命令/bin/watch ~/checker.bash,如预期的那样,服务器启动时会监视该命令。

我也有一个登录到该计算机的客户端,但是我不希望客户端的会话从中执行相同的命令.bashrc

我已经看过AcceptEnv传递环境变量,尽管它需要配置服务器,但我想避免这种情况。

我也不想为不同的使用2个不同的用户帐户.bashrc

还有其他角度可以解决这个问题吗?


您为什么不想要两个不同的帐户?所有的“客户端”(这似乎是一个不相关的第三方)应进行隔离(也由你自己)
umläute

Answers:


5

.bashrc仅当未通过调用时,才可以激活您的部分内容ssh

例如:

# within an SSH-session, ${SSH_TTY} will be set
if [ "x${SSH_TTY}" = "x" ]; then
  /bin/watch ~/checker.bash
fi

就像魅力一样,这里的所有答案都教给我很多东西。非常感激!
ljs.dev

13

两种方式:

不要在此会话中使用bash,请尝试使用破折号(或/ bin / sh):

ssh 127.0.0.1 /bin/dash

使用带有命令选项的bash禁用处理启动文件:

ssh 127.0.0.1 "bash --noprofile --norc"

你有没有尝试过?(尤其是#2)?
umläute

1
第二种方法只是挂在我身上。
slm

5
第二种方法非常适合我。由于未设置PS1,因此看不到提示,这是按要求执行的副作用。
Dan Garthwaite

两者都为我吊死
Aditya Mittal

@AdityaMittal如果您由于没有PS1提示而正在调用交互式会话,则两者都似乎挂起。尝试输入'ls /'
Dan Garthwaite

2

您可以将/ bin / watch ....行替换为

 if ps ax | grep /bin/watch | grep -v grep  > /dev/null 2>&1
 then
    echo "Nothing to do"
 else
    /bin/watch ~/checker.bash
 fi

或类似的东西。


太好了。在这种情况下,我可能有多个运行watch命令的外壳程序,但是我喜欢该解决方案。
ljs.dev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.