Generated by ChatGPT and sifu on 2024-12-07. 已验证可行性~
# 1、目标
在 A 服务器上通过 SSH 执行 B 服务器中的某个脚本
# 2、步骤
# 步骤 1: 在A服务器上生成 SSH 密钥(如果尚未生成)
如果 A 服务器上尚未生成 SSH 密钥,请使用以下命令生成一个新的 SSH 密钥对:
ssh-keygen -t rsa -b 2048
按提示操作,您可以选择保存位置(默认是 ~/.ssh/id_rsa)和设置密码(可以留空)。
# 步骤 2: 获取公钥
在 A 服务器上,获取生成的公钥内容。可以使用以下命令查看公钥:
cat ~/.ssh/id_rsa.pub
复制输出的内容(以 ssh-rsa 开头的整行)。
# 步骤 3: 将公钥添加到 B 服务器的 authorized_keys 中
SSH 登录到 B 服务器:
使用您的 SSH 配置文件连接到 B 服务器:
ssh root@myserver
编辑 authorized_keys 文件:
在 B 服务器上,执行以下命令打开 authorized_keys 文件(如果文件不存在,会自动创建):
nano ~/.ssh/authorized_keys
或者使用您喜欢的文本编辑器,例如 vi 或 vim。
粘贴公钥:
将从 A 服务器复制的公钥粘贴到 authorized_keys 文件的末尾。确保每个密钥都在单独的一行中。
保存并退出:
如果您使用 nano,可以按 CTRL + X,然后按 Y 保存更改,最后按 ENTER 退出。如果使用 vi,可以按 ESC,输入 :wq,然后按 ENTER 。
# 步骤 4: 设置权限(如果需要)
确保 .ssh 目录和 authorized_keys 文件的权限设置正确。可以使用以下命令进行设置:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2
# 步骤 5: 测试 SSH 连接
现在返回 A 服务器,尝试使用 SSH 连接到 B 服务器,检查是否能够无密码登录:
ssh root@myserver
如果一切正常,您应该能够成功登录而无需输入密码。这意味着 A 服务器的 SSH 密钥已成功添加到 B 服务器的 ~/.ssh/authorized_keys 中。
# 步骤 6: 远程执行脚本
# 方式一: 在 A 服务器上,使用以下命令执行 A 服务器中的脚本:
ssh root@myserver 'bash -s' < script.sh
这一步中,'bash -s' 是一个特殊参数,它将导致远程服务器执行一个 bash 命令,而不需要输入任何命令。然后,< script.sh> 是一个文件名,它指定了要执行的脚本。
# 方式二: 在 A 服务器上,使用以下命令执行 B 服务器中的脚本:
ssh root@myserver script.sh
注意:
第一种方式(
ssh root@myserver 'bash -s' < script.sh
)适用于在本地编辑并执行脚本,而不需要在远程服务器上存在脚本文件。第二种方式(
ssh root@myserver script.sh
)要求脚本已存在于远程服务器上并具备执行权限。