如何在本地 shell 脚本中 ssh 并执行远程脚本?

如何在本地 shell 脚本中 ssh 并执行远程脚本?

我有一个 shell 脚本,它将在远程服务器上启动一系列作业。我可以通过 ssh 连接到该服务器(但它确实需要密码!)并手动运行脚本,但某些步骤也在本地完成,因此我想避免手动 ssh 和执行操作。有没有办法自动 ssh/登录,然后在更大的本地 shell 脚本中启动命令?

答案1

如果您有许多命令要在远程服务器上运行,我建议您将它们创建为 shell 脚本,上传一次,然后根据 ssh 命令执行一次。

确保您对该脚本具有执行权限,并且它不依赖于从正常 shell 会话中获得的任何信息,例如交互式登录脚本设置的变量或路径,例如:.bashrc,因为这些不会运行通过远程 ssh 命令运行命令时。

另请记住检查以确保检查脚本的“返回”,以确保命令按预期完成。

答案2

要在远程主机上执行脚本/命令,请运行

ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>

-f如果您希望 ssh 立即转到后台而不是等待命令完成,请添加该选项。

考虑到登录,自动密码识别通常是一个坏主意。如果您的设置确实无法生成私钥/公钥对(私钥存储在本地计算机上,公钥存储在远程计算机上)并使用它进行身份验证 - 正如上面评论中所建议的 - ,您将必须恢复到sshpass可以通过以下方式启动远程会话/命令的工具:

sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]

答案3

您可以使用公钥/私钥身份验证来建立您的身份,ssh而无需密码。为此,您只需生成密钥对 ( ssh-keygen) 并将公钥添加到服务器的用户 ~/.ssh/authorithed_keys 文件中。

#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....

相关内容