关于bash:你如何在shell脚本中使用ssh?

How do you use ssh in a shell script?

当我尝试在shell脚本中使用ssh命令时,该命令就在那里。您有一个如何在shell脚本中使用ssh的示例吗?


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

1
ssh user@host command

例如

1
ssh user@host ls

为了安全地做到这一点,您需要在运行时询问用户密码,或者在远程主机上设置密钥。


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

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

1
ssh host command

如果要同时运行多个命令,请使用引号和分号:

1
ssh host"command1; command2"

需要引号来保护分号不受shell解释器的影响。如果您不使用它们,那么只有第一个命令可以远程运行,其余的都可以在本地计算机上运行。


您需要将ssh公钥放入远程主机上的~/.ssh/authorized_keys文件中。然后您就可以对主机密码进行ssh操作了。

或者,您可以使用ssh-agent。我建议不要在脚本中存储密码。


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


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

一个更复杂的命令意味着当shell命令请求密码时,将其添加到stdin中。除了Perl库之外,向用户显示询问密码的提示(如果是交互式的,至少是交互式的),还有很多选择。