如何在Shell脚本中使用SSH?

19

当我尝试在shell脚本中使用ssh命令时,该命令只是停在那里。您有使用ssh在shell脚本中的例子吗?

5个回答

38

这取决于您想要做什么,以及如何使用它。如果您只想在另一台机器上远程安全地执行一个命令,只需使用

ssh user@host command

例如

ssh user@host ls
为了安全地执行此操作,您需要在运行时要求用户输入密码或在远程主机上设置密钥。

3
+1 表示完整性、简洁性和简明性,此外还需要一个例子来说明! - Adam Liss

22

首先,您需要确保已设置无密码登录(公钥登录)。SSH至少有两种不同的配置文件格式。请查看系统上的 SSH 手册,咨询本地系统管理员或访问如何设置公钥身份验证?

要在批处理模式下运行 SSH(例如在 shell 脚本中),您需要传递要运行的命令。语法如下:

ssh host command

如果您想同时运行多个命令,请使用引号和分号:
ssh host "command1; command2"

引号的作用是保护分号免受Shell解释器的影响。如果省略了它们,只有第一个命令会在远程运行,其余所有命令都将在本地机器上运行。


2
这个在Mac OS上存在吗,还是只有Linux才有?是的,我刚刚读了如何获得这顶帽子。不过我想发表一个有意义的评论。 - Arc676

2
您需要将您的SSH公钥放入远程主机上的~/.ssh/authorized_keys文件中。然后,您就可以使用SSH无需密码访问该主机。
或者,您可以使用ssh-agent。我建议不要在脚本中存储密码。

0

您可以使用expect命令填写用户名/密码信息。


你是指 export 命令吗?它可以用来设置用户名(LOGNAMEUSER),但在我看来不能设置密码。 - Brutus

-3

最简单的方法是为运行脚本的用户使用证书。

更复杂的方法是在 shell 命令要求密码时将其添加到 stdin 中。Expect、perl 库可以向用户显示提示要求输入密码(如果至少是交互式的),有很多选择。


我不明白,抱歉。我不觉得你被踩是无缘无故的。在我看来,你应该尝试更具体地表达,因为似乎你在猜测。说实话,这对任何人都没有帮助。 - Pille

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接