Linux通过SSH密钥进行身份验证

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
1

按提示操作,您可以选择保存位置(默认是 ~/.ssh/id_rsa)和设置密码(可以留空)。

# 步骤 2: 获取公钥

在 A 服务器上,获取生成的公钥内容。可以使用以下命令查看公钥:

cat ~/.ssh/id_rsa.pub
1

复制输出的内容(以 ssh-rsa 开头的整行)。

# 步骤 3: 将公钥添加到 B 服务器的 authorized_keys 中

SSH 登录到 B 服务器:

使用您的 SSH 配置文件连接到 B 服务器:

ssh root@myserver
1

编辑 authorized_keys 文件:

在 B 服务器上,执行以下命令打开 authorized_keys 文件(如果文件不存在,会自动创建):

nano ~/.ssh/authorized_keys
1

或者使用您喜欢的文本编辑器,例如 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
1
2

# 步骤 5: 测试 SSH 连接

现在返回 A 服务器,尝试使用 SSH 连接到 B 服务器,检查是否能够无密码登录:

ssh root@myserver
1

如果一切正常,您应该能够成功登录而无需输入密码。这意味着 A 服务器的 SSH 密钥已成功添加到 B 服务器的 ~/.ssh/authorized_keys 中。

# 步骤 6: 远程执行脚本

# 方式一: 在 A 服务器上,使用以下命令执行 A 服务器中的脚本:

ssh root@myserver 'bash -s' < script.sh
1

这一步中,'bash -s' 是一个特殊参数,它将导致远程服务器执行一个 bash 命令,而不需要输入任何命令。然后,< script.sh> 是一个文件名,它指定了要执行的脚本。

# 方式二: 在 A 服务器上,使用以下命令执行 B 服务器中的脚本:

ssh root@myserver script.sh
1

注意:

第一种方式(ssh root@myserver 'bash -s' < script.sh)适用于在本地编辑并执行脚本,而不需要在远程服务器上存在脚本文件。

第二种方式(ssh root@myserver script.sh)要求脚本已存在于远程服务器上并具备执行权限。