如何在SSH登录时自动运行命令?


18

每当我登录到Linux服务器时,我都希望自动运行多个命令(设置一些变量,更改位置等)。

这需要在用户登录时完成,而不是在系统启动时完成。

我该如何设置呢?


您需要阅读bash(1)(man bash)中的INVOCATION部分。
Andrew Schulman

Answers:


31

将命令放入~/.bashrc。每次登录时,其中的任何内容都会执行。

如果仅在通过ssh登录时需要运行命令(而在物理登录时不需要),则可以测试是否存在SSH_CONNECTION环境变量,并且仅在发现存在环境变量时才运行命令。


我没有以root用户身份登录,它是一台AWS服务器,因此我必须以“ ec2-user”身份登录,然后使用“ sudo su-”更改为root用户。那么我应该将命令放在“ /home/ec2-user/.bashrc”中吗?

5
假设〜/ .bashrc来自〜/ .bash_profile。〜/ .bash_profile将是为诸如ssh之类的登录shell调用的脚本。我相信〜/ .bashrc会在您打开Gnome终端后被调用,例如,已经登录的用户
。– dgrant

您让我感到困惑,让我进一步解释:这是一个Amazon Web Services实例,实际上是一台服务器,因此没有人可以物理登录(我什至不确定它是否作为一台计算机实际存在)。我使用用户名ec2-user的PUTTY登录。这使我进入/ home / ec2-user目录。然后,我通过键入“ sudo su-”更改为root用户,然后将我放入“ / root”,然后我必须键入一系列命令,包括将我更改回“ / home / ec2-user”并进行一些设置。变量,别名等。那么...我将如何做到这一点?

另外,由于我要更改用户,所以我希望在ec2-user bash配置文件中,我应该仅将“ sudo su-”放入,然后将其余命令放在root bash文件中?

注意:实际上,如果存在.profile就会被调用,除非存在.bash_profile,否则它将被调用。
dgrant,

14

如果希望所有用户都可以将它放在〜/ .bashrc或/etc/bash.bashrc中:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

在关闭执行后如何丢失会话?
e-info128 2014年

1
@WHK您失去会议意味着什么?
Llamageddon 2014年

@Llamageddon:我想他在想我也是一样。如果我想将整个SSH会话放入screen,则可以使用您的答案并放在screen那里而不是回声。这样做的问题是完成屏幕会话将返回到SSH提示符,而不是注销。不过,只写出此注释就给了我答案:在logout命令后添加screen命令。
zondo

但是,这不适用于不使用bash的ssh会话,例如,当我打开sftp会话时。
Fabio

@zondo @ e-info128 exec command将用您运行的任何内容替换当前的shell。
Llamageddon '17

6

或者,您可以指定要在调用以下命令期间运行的命令ssh

$ ssh -t server 'cmd; exec bash -l'

列表中的最后一条命令应在您首选的shell中启动一个交互式会话。如果要运行许多命令,请考虑在SSH服务器上创建脚本文件。


1
这是非常有用的。不知道这是否是发问者提出的答案,但是人们应该知道它,因为它可能并不明显。例如“ ssh user @ host” export x = 5; 庆典”然后,在终端弹出回波$ X显示器5
的光子

3

其实~/.ssh/rc是为你添加命令运行时,正确的地方,你登录,而不是系统的任何用户。

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

不必要。这是可以放置命令位置。
丹尼尔·B


如果他们不知道自己在做什么,那确实会给某人带来麻烦。它在极端情况下可能很有用,但如果某人忘记了在其中放置命令或该文件的名称和路径,则可能确实使某人困惑。通常,最好将启动登录命令放在预期位置,将.bashrc放在远程位置,然后测试$ SSH_CONNECTION,如此处其他答案所示。
clearlight '19
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.