Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用SSH在远程计算机上发出多个命令的替代方法?_Unix_Shell_Scripting - Fatal编程技术网

Unix 使用SSH在远程计算机上发出多个命令的替代方法?

Unix 使用SSH在远程计算机上发出多个命令的替代方法?,unix,shell,scripting,Unix,Shell,Scripting,在中,答案似乎是用分号分隔语句。然而,如果我们使用多个if语句和复杂的带引号的字符串编写复杂的脚本,这可能会变得很麻烦。我想 我想另一种选择是简单地一个接一个地发出多个SSH命令,但这同样很麻烦,而且我没有设置公钥/私钥身份验证,因此这会多次询问密码 理想情况下,我想要的与交互式shell体验非常相似:在脚本的某一点上,您可以使用sshinto@the_remote_server它会提示输入密码(以交互方式),然后从那时起直到脚本发出“退出”命令,脚本中的所有命令都会在远程计算机上解释 当然,这

在中,答案似乎是用分号分隔语句。然而,如果我们使用多个if语句和复杂的带引号的字符串编写复杂的脚本,这可能会变得很麻烦。我想

我想另一种选择是简单地一个接一个地发出多个SSH命令,但这同样很麻烦,而且我没有设置公钥/私钥身份验证,因此这会多次询问密码

理想情况下,我想要的与交互式shell体验非常相似:在脚本的某一点上,您可以使用sshinto@the_remote_server它会提示输入密码(以交互方式),然后从那时起直到脚本发出“退出”命令,脚本中的所有命令都会在远程计算机上解释

当然,这是行不通的:

ssh user@host.com
  cd some/dir/on/remote/machine
  tar -xzf my_tarball.tgz
  cd some/other/dir/on/remote
  cp -R some_directory somewhere_else
exit
还有其他选择吗?我想我可以直接从脚本中取出这部分内容,并将其粘贴到远程主机上的脚本中。无聊的。现在我维护两个脚本。另外,我需要一个小配置文件来保存默认值和其他东西,我也不想在两个地方维护它

还有其他解决方案吗?

使用heredoc

ssh user@host.com << EOF
cd some/dir/on/remote/machine
tar -xzf my_tarball.tgz
cd some/other/dir/on/remote
cp -R some_directory somewhere_else
EOF

sshuser@host.com使用herdoc语法,如

ssh user@host.com <<EOD
 cd some/dir/on/remote/machine
 ...
EOD

随着herdeoc脚本变得越来越复杂(尤其是变量),您需要引用herdeoc delimter:

echo "ls -al" | ssh user@host.com