我想通过代理服务器ssh到一台机器并在该服务器上运行一个脚本,输入参数传递
我在下面使用:
ssh -t tooladm@200.81.36.188 "ssh -t tooladm@apuatt01" ". ./.profile >/dev/null 2>&1; cd /astxpinfs/ast/tooladm/JHF_SYNC_Particular_HF ; ./SyncToSite.ksh $product $release "${hf_list}" ${LOG_DIR_NAME} 2>&1 > /dev/null"
清关:
假设我在机器A中,并且想要运行位于机器apuatt01中的脚本 没有直接连接黑白机器A和apuatt01 所以我通过200.81.36.188
连接apuatt01通过使用它,我无法运行上述脚本
请帮助我,我做错了
答案 0 :(得分:0)
您可以使用Bash here document使脚本更清晰:
ssh -t tooladm@200.81.36.188 -- ssh -t tooladm@apuatt01 <<EOS
source .profile >/dev/null 2>&1
cd /astxpinfs/ast/tooladm/JHF_SYNC_Particular_HF
./SyncToSite.ksh $product $release "${hf_list}" ${LOG_DIR_NAME} 2>&1 > /dev/null
EOS
注意,双短划线将命令与传递给ssh
的参数分开。
此语法也适用于ksh
。从KornShell手册(man ksh
):
<<[-]word
shell输入被读取到相同的行 删除任何引用后的文字或文件结尾 没有参数替换,命令替换,算术 替换或文件名生成是在word上执行的。该 结果文档,称为here-document,成为标准 输入。如果引用任何单词的字符,那么没有解释 放在文件的字符上;否则,参数 扩展,命令替换和算术替换发生, \ new-line被忽略,\必须用于引用字符\, $,`。如果 - 附加到&lt;&lt;,则会从中删除所有前导标签 单词和文件。如果#附加到&lt;&lt;,则引导 空格和制表符将从文档的第一行中删除 最多等同的缩进将被剥离 剩下的行和来自单词。假设标签停止发生在 每8列用于确定缩进。