Can I ssh somewhere, run some commands, and then leave myself a prompt?
我发现自己需要登录到各种服务器,设置环境变量,然后以交互方式工作。
例如
1 2 3 4 5 | $ ssh anvil jla@anvil$ export V=hello jla@anvil$ export W=world jla@anvil$ echo $V $W hello world |
如何组合前几个命令,然后在提示下离开自己?
类似:
1 2 3 | $ ssh anvil --on-login 'export V=hello; export W=world;' jla@anvil$ echo $V $W hello world |
显然这是一个模型问题。我真正要问的是,"我应该如何对不同的机器进行ssh,运行一些命令,然后像手动一样继续运行它们?"
最简单的可能是:
1 | $ ssh -t host 'cmd1; cmd2; sh -i' |
如果要设置变量,请执行以下操作:
1 | $ ssh -t host 'cmd1; cmd2; FOO=hello sh -i' |
请注意,这是一个糟糕的黑客程序,您最好将所需的初始命令放入脚本并执行以下操作:
1 2 3 | $ scp setup host:~ $ ssh host host$ . setup |
您还可以使用以下Expect脚本:
1 2 3 4 5 6 7 8 9 | #!/usr/bin/expect -f spawn ssh $argv send"export V=hello " send"export W=world " send"echo \$V \$W " interact |
结果这是由这个问题回答的:
如何直接对特定目录执行ssh?
对SSH:
1 | ssh -t anvil"export V=hello; export W=world; bash" |
然后:
1 2 | jla@anvil$ echo $V $W hello world |
值得注意的是,
因此,例如,如果要在砧上执行命令,但砧只能从主机网关(通过防火墙等)访问,可以这样做:
1 | ssh gateway -t 'ssh anvil -t"export V=hello; export W=world;bash -l";' |
退出铁砧,也会让你退出网关(如果你想在离开铁砧后留在加特威,而不是在关闭命令前添加另一个
另一种方法是执行这个野兽(也给了我一个彩色外壳):