ssh 远程执行远程机上的脚本或命令

https://www.cnblogs.com/ilfmonday/p/ShellRemote.html

 

单命令执行: ssh user@remoteNode "cd /home ; ls"

今天 远程执行命令发现了一个问题:

当执行下面命令

ssh -o ConnectTimeout=60 -qn user@host "cd /tc1/fs_users/;pwd; echo '12'|OneScriptToRunl.sh -s" > test.log

发现错误: ksh: OneScriptToRunl.sh: not found [No such file or directory]

改成命令就可以执行:

ssh -q $User@$Machine ". ./.profile>/dev/null; echo '12' | sh $GF_HOME/OneScriptToRun.sh -s" > $LOG/QUERY_"$Name"_$NOW.log 2>&1 &

原因: #!/bin/ksh
. ~/.profile >/dev/null      是bash开始标准格式

               1.) 点号 " . "  是shell的内部命令,其功能相当于另一个shell内部命令 "source" 。
                   它们的作用是:在当前的shell环境中解释执行shell脚本,而不会创建子shell进程。
                    有什么好处:这样做使得将要执行的shell脚本,可以访问当前shell环境中的所有已定义的变量,
                             以及shell脚本中设置的变量也会保存下来。

              2.)波浪号 " ~ " 是指代当前登录的用户的主目录,即 /home/用户名/  ,所以 " ~/.profile " 就是指向用户主目录下的.profile文件。
       .profile 文件是一个shell脚本文件,每当用户登录时就会自动被调用,而现在是由我们主动去调用它,通过点号 " . " 来调用。
               3.) 右尖括号 " > "  是输出重定向符,表示将符号左边的命令执行结果输出到右边指定的文件中(只重定标准输出)。
               4.)/dev/null 就像是一个回收站,任何写入该文件的内容都会被清除。
              综合一下就是:执行当前登录用户主目录下的.profile脚本文件,屏蔽执行脚本过程中输出的信息,不包括错误信息。

多命令执行:

ssh user@host > /dev/null 2>&1 << eeooff
        cd /directory
        #touch abcdefg.txt
        echo '12' | command.sh -s > test123456.out
        exit
        eeooff
        echo done!

 远程执行的内容在“<< eeooff ” 至“ eeooff ”之间,在远程机器上的操作就位于其中,注意的点:

  1. << eeooff,ssh后直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。
  2. 重定向目的在于不显示远程的输出了
  3. 在结束前,加exit退出远程节点


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值