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

时间:2011-07-14 22:47:02

标签: unix shell scripting

似乎在this question中,答案是用分号分隔语句。但是,如果我们使用多个if语句和复杂的引用字符串进入复杂的脚本,那么这可能会变得很麻烦。我想。

我想另一种选择是简单地一个接一个地发出多个SSH命令,但这又是麻烦的,而且我没有设置公钥/私钥认证所以这就要求密码一堆次。

我理想的是与交互式shell体验非常相似:在脚本的某一点上,你将ssh插入@the_remote_server并提示输入密码,你输入密码(交互式),然后从那一点开始直到您的脚本发出“exit”命令,脚本中的所有命令都在远程计算机上解释。

当然这不起作用:

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

还有另一种选择吗?我想我可以从我的脚本中取出那部分并将其粘贴到远程主机上的脚本中。咩。现在我正在维护两个脚本。另外,我想要一个小配置文件来保存默认值和其他东西,我也不想在两个地方维护它。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:9)

使用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

答案 1 :(得分:3)

使用heredoc语法,例如

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

或管道,如

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