我正在寻找一种自动启动我的开发环境的方法。我有三个必须启动的虚拟机,然后必须对每个虚拟机执行ssh操作,并在它们上打开VPN。
到目前为止,我已经让它们启动并设法ssh到它们:
#!/bin/sh
virsh start virtual_1
virsh start virtual_2
virsh start virtual_3
sleep 2m
gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &
gnome-terminal --title "virtual_2: 11.100" -x ssh root@192.168.11.100 &
gnome-terminal --title "virtual_1: 12.100" -x ssh root@192.168.12.100 &如何在启动openvpn的每个终端中执行额外的命令?
为了简单起见,我尝试在每个终端上执行echo 1命令,而不是启动VPN。
我发现终端启动上的多个命令可以像这样运行:
gnome-terminal -x bash -c "cmd1; cmd2"为了简单起见,我对一个终端进行了修改:
gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &至:
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 ; echo 1" &但是virtual_3的终端没有打印1,我想,也许在终端还没准备好之前,命令执行得太快了,所以我试着添加&&
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 &&; echo 1" &但这也没有给出任何结果。
发布于 2012-07-16 16:43:15
首先,如果你运行
gnome-terminal -x bash -c "cmd1; cmd2"您让bash执行cmd1和cmd2。它不会先执行cmd1,然后将cmd2赋给它的结果。ssh是一个在终端中运行的程序,您的cmd2在该程序完成之前不会被执行。
所以你需要运行ssh并告诉它来执行你的命令。
您可以通过以下方式执行此操作:
ssh user@address "command_to_execute"但是,ssh会在命令完成后退出。正如您在"With ssh, how can you run a command on the remote machine without exiting?“中看到的,您可以使用-t选项执行ssh,这样它就不会退出:
ssh -t user@address "command_to_execute"所以你的命令最后变成:
gnome-terminal --title "virtual_3: server" -x bash -c "ssh -t root@192.168.1.132 'echo 1'"您是对的,仅给-t是不够的(尽管有必要)。-t会为tty分配缓冲区,但不会为您执行bash。出自ssh手册
-t 强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如在实现菜单服务时。多个-t选项强制分配tty,即使ssh没有本地tty也是如此。
如果指定了command,它将在远程主机上执行,而不是在登录shell上执行。
所以你需要的是,执行bash你自己。因此:
ssh -t user@address "command_to_execute; bash"https://stackoverflow.com/questions/11500649
复制相似问题