2009-10-27 72 views
14

我想要一个命令ssh'es进入一台机器,运行一个命令(cd或执行脚本或su),然后给我壳。传递给ssh的命令似乎总是退出。ssh与命令....加壳

什么我在寻找一些例子: “我的ssh @ MACHINE1‘./executeMyScript & & CD/developmentDirectory’”,然后它给了我我的背壳。

我想这样做的原因是因为我使用了mrxvt(tabbed x terms),它允许我为启动时执行的所有选项卡定义命令。我希望有一些ssh连接到同一台机器,但让他们在sshing之后做不同的事情。

-Rob

谢谢!

回答

10

变化真的,使用ssh的-t选项强制伪终端分配:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

谢谢!在第一次检查时,该功能完全按照我的意愿工作!为“-t”欢呼! – robarson 2009-10-28 18:02:25

+0

即使这个问题得到了适当的回答,如果有人正在阅读,你知道我怎样才能拥有bash的实例,我从这个命令开始打开emacs(这样当我关闭emacs时,它会返回到我的bash终端) ?哎呀..甚至打开emacs没有bash的东西会很好(例如emacs在启动后不会立即退出)。 – robarson 2009-10-29 15:15:18

4

如何

ssh [email protected] ./executeMyScript '&&' bash -i 

你必须引用&&所以它会被传递到远程机器,而不是由当地壳吞噬。

引用一个​​3210字符,你可以改变你的启动目录,太:

ssh [email protected]achine ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

谢谢。打电话给bash工作...因为它给了我一个外壳。不幸的是,它不工作得很好..简单的键盘快捷键,如CTRL^a不工作,这意味着我需要尝试并找到不同的解决方案。顺便说一句,它还打印出“bash:在这个shell中没有作业控制”。 – robarson 2009-10-27 22:20:45

+3

尝试使用'-t'选项:'ssh -t me @ machine ...' – mob 2009-10-27 23:04:31

2

把这样的事情在脚本的末尾要运行:

bash -li 

启动猛砸作为交互式登录外壳。这并不完美,因为您会错过TERM转发等内容,但它可能足以满足您的需求。

如果没有足够的,我只是让两个独立的SSH调用,一个运行脚本和其他登录我进去。

+0

+1两个单独的ssh命令。 KISS – 2009-10-28 10:59:17

2

如何使用ssh_config中的SendEnv选项发送一个特定的环境从本地机器到远程机器的选项,然后检查远程主机配置中的环境变量?

在你的.ssh /特殊配置文件:

remotehost: 
    SendEnv * 

您当地的脚本:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

您的远程.bash_profile文件:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

您可能需要检查其中的一些内容,我只是将它们从手册中扔出来,之前没有尝试过。就我个人而言,我不喜欢为此解决方案修改本地和远程环境。在其他的答案

0

这对我的作品。

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

为什么它适合你?给予更多的细节,使OP能够理解你为什么写了你所做的事情。 – rayryeng 2014-08-08 19:01:50

+1

这也是一个或多或少直接复制现有的选择答案,发布4年前... – Synchro 2014-08-08 19:19:00

+0

解释会很好。 – 2014-08-08 19:42:54