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


32

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

ssh host command

所以我需要输入的是:

ssh host

然后该命令运行。

Answers:


16

也可以在授权密钥文件中插入命令。(~/.ssh/authorized_keys)。这使您可以为文件中的每个键执行自定义命令。我使用它来通过防火墙转发外壳连接。结果是我可以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 ...

更具体地说,重定向是针对我的gitolite实例。这样就可以进行简单的外部访问,而不会直接将甘露石主体暴露于任何外部访问。检查手册页以获取更多信息。(http://linux.die.net/man/8/sshd


1
这太棒了,不知道您可以做到这一点。+1
Brian Wigginton

3
如果将命令放在您的authorized_keys文件中,它将破坏诸如rsync和scp之类的东西-您将获得如下信息:open terminal failed:not terminal。另外,请注意,如果命令失败,您将无法登录。我发现这很困难。
约翰·亨特

11

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


3
/.ssh/rc位于客户机或服务器上?看起来像是从文档服务器开始的,对不对?
重载了2010年

1
是的,那将在服务器计算机上。
锥杀手

不幸的是,该rc文件似乎无法运行screen,例如出现错误“必须连接到终端”
davidparks21 '17

10

您可以设置一个bash别名。

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

alias ssl='ssh some_host run_command'

这样,您甚至不必键入主机名。

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

kevin@box:~$ cat ssl.sh
#!/bin/sh
ssh $1 some_command
kevin@box:~$

2

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

  RequestTTY yes
  RemoteCommand <some command>

<some command>您的命令在哪里。这也适用于屏幕或tmux。

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.