如果我已经把公钥放到远程主机上。所以没有密码输入问题。如何ssh进入远程主机并立即执行命令
我想登录远程机器并立即执行screen -r
。有没有办法做到这一点?
例如:
ssh example.com ; screen -r
但是,这是错误的,因为screen -r
不会发送到远程主机。
如果我已经把公钥放到远程主机上。所以没有密码输入问题。如何ssh进入远程主机并立即执行命令
我想登录远程机器并立即执行screen -r
。有没有办法做到这一点?
例如:
ssh example.com ; screen -r
但是,这是错误的,因为screen -r
不会发送到远程主机。
从你的榜样删除分号:
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"
它会返回:'必须连接到终端。这不是我想要的。 'screen -r'后面我想继续使用这个主机。 – 2012-03-22 16:25:05
我假设'继续使用这个主机',你的意思是你想发出一串命令。请参阅编辑我的答案。正如我之前所说的,'screen -r'在没有连接终端的情况下无法正常工作,如果您通过ssh运行远程命令,则不会有终端。 – Perception 2012-03-22 16:31:06
@perception,“如果你通过ssh运行远程命令,你将不会有终端”是不真实的 - 请参阅我的答案以获得解释。 – amcnabb 2012-03-22 17:20:42
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'是正确的语法。
这将工作
ssh [email protected] 'ls -l'
这是错的。反引号将执行命令* ls -l *,然后取出该命令的输出并将其作为* ssh root @ something的参数* – Corbin 2012-03-22 05:16:31
糟糕!错字!我的意思是'而不是'。更正 – 2012-03-22 05:17:59
这不是我想要的。 'screen -r'后面我想继续使用这个主机。 – 2012-03-22 16:25:26
尝试使用单引号:
ssh example.com 'screen -r'
不需要引号 – salva 2012-03-22 08:53:05
这不会提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – 2015-05-22 11:28:19
@SamiKuhmonen谁/你在说什么? – 2015-05-22 23:17:27
只要把你想要的主机名后运行命令:
ssh example.com screen -r
当您运行命令,默认情况下,ssh不会分配伪终端。如果您在远程主机上运行类似屏幕的交互式程序,则必须有伪终端。 -t
选项使这发生。尝试:
ssh -t example.com "screen -r"
您还可以重复你的命令到远程主机:
echo "command" | ssh [email protected]
试试这个...
ssh -XY -t [email protected]_IP 'ssh -XY -t [email protected]_IP'
,你也可以用命令screen -r
或任何其他在继续remoteToRemote_IP机器。
'screen'命令可能需要TTL。其他命令工作正常,但正如在答案中指出的那样,您需要'ssh host“commands”' – gahooa 2012-03-22 18:00:02