2012-03-22 98 views
6

如果我已经把公钥放到远程主机上。所以没有密码输入问题。如何ssh进入远程主机并立即执行命令

我想登录远程机器并立即执行screen -r。有没有办法做到这一点?

例如:

ssh example.com ; screen -r 

但是,这是错误的,因为screen -r不会发送到远程主机。

+0

'screen'命令可能需要TTL。其他命令工作正常,但正如在答案中指出的那样,您需要'ssh host“commands”' – gahooa 2012-03-22 18:00:02

回答

6

从你的榜样删除分号:

ssh example.com "screen -r" 

你不会得到太多的带宽,对于特定的命令,虽然,因为它需要为成功执行附加的终端。


* EDIT 1 *

要运行多个命令,只是串他们通过分号一起分离:

ssh example.com "screen -r; ls -al; ps -elfc" 

* EDIT 2 *

仍然不完全确定你正在努力完成什么(screen -r仅仅是一个例子,还是你真的想把一堆命令链接在一起?)。在任何情况下,我修改我的回答涵盖了更多的可能性:

要链随机命令在一起:

ssh example.com "ps -elfc; ls" 

要在运行屏幕后的一些随机命令:

ssh -t example.com "screen -r; ls" 

要专门跑屏幕并发送命令:

ssh -t example.com "screen -r -X ls" 
+0

它会返回:'必须连接到终端。这不是我想要的。 'screen -r'后面我想继续使用这个主机。 – 2012-03-22 16:25:05

+0

我假设'继续使用这个主机',你的意思是你想发出一串命令。请参阅编辑我的答案。正如我之前所说的,'screen -r'在没有连接终端的情况下无法正常工作,如果您通过ssh运行远程命令,则不会有终端。 – Perception 2012-03-22 16:31:06

+0

@perception,“如果你通过ssh运行远程命令,你将不会有终端”是不真实的 - 请参阅我的答案以获得解释。 – amcnabb 2012-03-22 17:20:42

1

http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

SSH [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec] [-D [bind_address:]端口] [-e的escape_char] [-F CONFIGFILE] [-i identity_file] [-L [bind_address:] port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-R [bind_address:] port:host:hostport] [-S ctl_path] [-w tunnel:tunnel] [user @] hostname [command]

Command是最后一个参数。 ;告诉本地shell ssh和screen是两个不同的命令,不是一个是命令,另一个是参数。

不知道它是否会工作或因为屏幕是一个奇怪的程序来做到这一点,但ssh blah.com'screen -r'是正确的语法。

1

这将工作

ssh [email protected] 'ls -l' 
+0

这是错的。反引号将执行命令* ls -l *,然后取出该命令的输出并将其作为* ssh root @ something的参数* – Corbin 2012-03-22 05:16:31

+0

糟糕!错字!我的意思是'而不是'。更正 – 2012-03-22 05:17:59

+0

这不是我想要的。 'screen -r'后面我想继续使用这个主机。 – 2012-03-22 16:25:26

1

尝试使用单引号:

ssh example.com 'screen -r' 
+0

不需要引号 – salva 2012-03-22 08:53:05

+0

这不会提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – 2015-05-22 11:28:19

+0

@SamiKuhmonen谁/你在说什么? – 2015-05-22 23:17:27

1

只要把你想要的主机名后运行命令:

ssh example.com screen -r 
8

当您运行命令,默认情况下,ssh不会分配伪终端。如果您在远程主机上运行类似屏幕的交互式程序,则必须有伪终端。 -t选项使这发生。尝试:

ssh -t example.com "screen -r"