使用 ssh 配置文件运行远程命令

Pet*_*Law 41 ssh remote-control

我希望能够设置一个命令以在 ssh 登录到服务器时运行,而无需键入它。基本上,我正在寻找等效于以下内容的 ssh 配置文件:

ssh host command
Run Code Online (Sandbox Code Playgroud)

所以我需要输入的是:

ssh host
Run Code Online (Sandbox Code Playgroud)

并运行命令。

小智 27

您可以在您的 中解决这个问题.ssh/config file,对于要执行命令的主机,添加

  RequestTTY yes
  RemoteCommand <some command>
Run Code Online (Sandbox Code Playgroud)

<some command>你的命令在哪里。这也适用于 screen 或 tmux。

  • 恕我直言,这是预期的答案。 (2认同)

小智 16

也可以在您的授权密钥文件中插入命令。( ~/.ssh/authorized_keys). 这允许您为文件中的每个键执行自定义命令。我用它通过我的防火墙转发 shell 连接。结果是我可以 ssh 到一台主机,它会自动将会话连接到网络内的主机。该authorized_keys条目如下所示:

command="ssh -Tq <hostname> \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... the rest of the key ...
Run Code Online (Sandbox Code Playgroud)

更具体地说,重定向是针对我的 gitolite 实例的。这允许简单的外部访问,而无需直接将 gitolite 主机暴露给任何外部访问。查看手册页以获取更多信息。( http://linux.die.net/man/8/sshd )

  • 如果你把命令放在你的 authorized_keys 文件中,它会破坏诸如 rsync 和 scp 之类的东西——你会得到这样的东西:打开终端失败:不是终端。另外,请注意,如果命令失败,您将无法登录。我已经很艰难地发现了这一点。 (3认同)

con*_*yer 10

如果您正在运行OpenSSH,它看起来就像~/.ssh/rc在登录时执行

  • `/.ssh/rc` 位于客户端还是服务器机器上?看起来像服务器的文档,对吧? (3认同)

Kev*_*n M 9

您可以设置 bash 别名。

在您的 .bashrc 文件中,输入:

alias ssl='ssh some_host run_command'
Run Code Online (Sandbox Code Playgroud)

然后您甚至不必键入主机名。

或者,如果您想对多个主机执行此操作(并且多个别名不起作用),则使用一个小脚本:

kevin@box:~$ cat ssl.sh
#!/bin/sh
ssh $1 some_command
kevin@box:~$
Run Code Online (Sandbox Code Playgroud)