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

Ala*_*air 30 linux centos bash

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

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

我怎样才能设置它来做到这一点?

Dav*_*d Z 40

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

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

  • 这假设 ~/.bashrc 来自你的 ~/.bash_profile。~/.bash_profile 将是为 ssh 等登录 shell 调用的脚本。我相信 ~/.bashrc 会在你打开 Gnome 终端时被调用,例如,在已经登录之后。 (5认同)

Lla*_*don 20

如果您希望所有用户都使用它,只需将它放在 ~/.bashrc 或 /etc/bash.bashrc 中:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi
Run Code Online (Sandbox Code Playgroud)


Dmi*_*yev 12

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

$ ssh -t server 'cmd; exec bash -l'
Run Code Online (Sandbox Code Playgroud)

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

  • 这非常有用。不确定这是否正是提问者提出的答案,但人们应该知道它,因为它可能并不明显。例如“ssh user@host”export x=5; bash”然后在弹出的终端中 echo $x 显示 5。 (2认同)

bro*_*ong 6

其实~/.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.
Run Code Online (Sandbox Code Playgroud)


Mar*_*aun 6

如果使用 SSHconfig文件进行连接,则可以嵌入一个启动命令,该命令仅在连接主机时执行

为此,在~/.ssh/config客户端计算机上插入/编辑以下内容:

Host myhost
  HostName *.*.*.*
  User root
  RequestTTY force
  RemoteCommand cd / && bash -i
Run Code Online (Sandbox Code Playgroud)

输入适当的主机名,Port XX如果端口不是 22,则附加一个新行。示例将cd位于服务器的根目录中。&& bash -i并且RequestTTY force对于继续使用远程终端至关重要。

要连接到您的主机,您必须在目标计算机上安装您的公钥,您可以像这样检索:

Host myhost
  HostName *.*.*.*
  User root
  RequestTTY force
  RemoteCommand cd / && bash -i
Run Code Online (Sandbox Code Playgroud)

并像这样在远程安装:

cat ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样简单地连接机器:

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys && echo "YOUR_PUBLIC_KEY" >> ~/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

它将连接并执行RemoteCommand.

  • 要将密钥复制到远程服务器,使用“ssh-copy-id -i <path_to_your_keyfile>”要容易得多。它将为您处理所有目录创建和访问控制。但是,“ssh-copy-id”命令并非在所有系统上都可用。 (2认同)