使用ssh运行脚本

时间:2017-04-18 14:46:23

标签: shell ssh ksh

我使用机器A,我想运行机器B中存在的脚本。

我做了普通的命令:

using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlDevConnection"].ConnectionString))
using(SqlCommand command = new SqlCommand(Q, con))
{
    con.Open();
    // add parameters correctly based on above example
    command.Parameters.AddWithValue("@val1", recordID);
    command.ExecuteNonQuery();
}

问题是我在脚本中使用了一些无法用机器A解释的命令。所以我找不到命令:(例如)

ssh user@machine_B_adress '. script.sh'

我试图打开一个shh: ssh user @ machine_B_adress

然后运行脚本,它可以工作!!!

1 个答案:

答案 0 :(得分:1)

假设user @ machine_B的shell是bash,第一个例子是'ssh user@machine_B_adress '. script.sh',bash为交互式/非交互式会话设置了不同的shell env。

请参阅man bash有关交互式shell

的信息

看起来您可以通过添加bash -l -c

来模拟交互式环境
$ ssh user@machine_B_address "bash -l -c '. script.sh'

我的快速测试,我将调试回音添加到远程用户的 .bash_profile

$ ssh foouser@jdsrpi1 "bash --login -c '. foo.sh'"

这是 .bash_profile

文件
foouser 

SHELL = /bin/bash

PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

ksh

的类似方案
$ ssh kshuser@jdsdrop1.jimsander.io "date"
Tue Apr 18 11:52:43 EDT 2017

$ ssh kshuser@jdsdrop1 "ksh -l -c date"

这是SHELL(/ usr / bin / ksh)文件 .profile

Tue Apr 18 11:53:24 EDT 2017