我正在寻找一种方法来自动启动我的开发环境.我有三个必须启动的虚拟机,然后必须ssh对每个虚拟机打开它们.
到目前为止,我已经让他们开始并设法向他们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 &
Run Code Online (Sandbox Code Playgroud)
如何在每个启动openvpn的终端中执行附加命令?
为简单起见,我试图echo 1在每个终端而不是启动VPN.
我发现终端启动时的多个命令可以运行如下:
gnome-terminal -x bash -c "cmd1; cmd2"
Run Code Online (Sandbox Code Playgroud)
所以对于一个终端保持简单我改变了:
gnome-terminal --title "virtual_3: server" -x ssh root@192.168.1.132 &
Run Code Online (Sandbox Code Playgroud)
至:
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 ; echo 1" &
Run Code Online (Sandbox Code Playgroud)
但是1没有打印在virtual_3的终端.然后我想,也许在终端准备好之前命令执行得太快,所以我尝试添加&&:
gnome-terminal --title "virtual_3: server" -x bash -c "ssh root@192.168.1.132 &&; echo 1" &
Run Code Online (Sandbox Code Playgroud)
但这也没有结果.
Sha*_*baz 11
首先,如果你跑
gnome-terminal -x bash -c "cmd1; cmd2"
Run Code Online (Sandbox Code Playgroud)
你得bash执行cmd1和cmd2.它不首先执行cmd1然后给cmd2它的结果.ssh是在终端中运行的程序,在cmd2完成之前不会执行.
所以你需要运行ssh并告诉它执行你的命令.
你可以这样做:
ssh user@address "command_to_execute"
Run Code Online (Sandbox Code Playgroud)
但是,ssh命令完成后退出.正如你可以看到" 有了SSH,你怎么能不退出运行在远程机器上的命令? ",您可以执行ssh与-t选项,这样就不会退出:
ssh -t user@address "command_to_execute"
Run Code Online (Sandbox Code Playgroud)
所以你的命令最终成为:
gnome-terminal --title "virtual_3: server" -x bash -c "ssh -t root@192.168.1.132 'echo 1'"
Run Code Online (Sandbox Code Playgroud)
你是对的,-t单独奉献是不够的(尽管有必要).为您-t分配缓冲区tty但不执行bash.从手册ssh:
-t 强制伪tty分配.这可以用于在远程机器上执行任意基于屏幕的程序,这可以是非常有用的,例如在实现菜单服务时.多个-t选项强制tty分配,即使ssh没有本地tty.
如果
command指定,则在远程主机而不是登录shell上执行.
所以你需要的是,执行你的自我.因此:
ssh -t user@address "command_to_execute; bash"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9769 次 |
| 最近记录: |