要从本地 Mac 远程执行 Linux 机器上的脚本 /root/weixin-article-start.sh,可以使用 ssh 命令。你需要确保在 Linux 机器上设置了 SSH 访问权限,并且你有适当的凭据来登录该机器。
步骤 1:配置 SSH 访问
-
确保 SSH 服务器在远程 Linux 机器上运行:
- 通常,SSH 服务器默认安装并运行在大多数 Linux 发行版上。如果没有,请安装并启动 SSH 服务器。例如,在 Debian 或 Ubuntu 上:
sudo apt-get update sudo apt-get install openssh-server sudo systemctl enable ssh sudo systemctl start ssh
- 通常,SSH 服务器默认安装并运行在大多数 Linux 发行版上。如果没有,请安装并启动 SSH 服务器。例如,在 Debian 或 Ubuntu 上:
-
检查 SSH 服务器状态:
- 确认 SSH 服务器正在运行:
sudo systemctl status ssh
- 确认 SSH 服务器正在运行:
-
在远程机器上创建或配置 SSH 密钥(可选):
- 如果你希望通过密钥而不是密码来进行身份验证,可以在本地 Mac 生成 SSH 密钥对,并将公钥添加到远程机器的
~/.ssh/authorized_keys文件中。
- 如果你希望通过密钥而不是密码来进行身份验证,可以在本地 Mac 生成 SSH 密钥对,并将公钥添加到远程机器的
步骤 2:在本地 Mac 远程执行脚本
使用 ssh 命令从本地 Mac 连接到远程 Linux 机器并执行脚本:
ssh root@47.111.1.177 'bash /root/weixin-article-start.sh'
详细步骤
-
打开终端:在本地 Mac 上打开一个终端窗口。
-
使用 SSH 命令连接并执行脚本:
ssh root@47.111.1.177 'bash /root/weixin-article-start.sh' -
输入密码:如果没有配置 SSH 密钥,系统会提示你输入远程机器的
root用户密码。
使用 SSH 密钥认证(可选)
-
在本地 Mac 上生成 SSH 密钥:
ssh-keygen -t rsa -b 2048 -
将公钥复制到远程 Linux 机器:
ssh-copy-id root@47.111.1.177 -
使用 SSH 密钥认证执行脚本:
ssh -i ~/.ssh/id_rsa root@47.111.1.177 'bash /root/weixin-article-start.sh'
脚本执行确认
在远程服务器上,你可以通过以下方式确认脚本是否成功执行:
- 检查脚本日志:如果你的脚本有日志输出,检查相关日志文件。
- 查看进程:使用
ps或top命令查看脚本相关的进程是否正在运行。 - 手动检查脚本效果:如果脚本执行会产生一些可见的效果(如文件生成、服务启动),可以手动检查这些效果是否存在。
通过上述步骤,你可以方便地从本地 Mac 远程执行 Linux 机器上的脚本,并确保脚本正确运行。
常见报错:
ERROR: SHA256:a3H0tFG5vZf5UX9Cljt7N6ZKL409sUTiJFn5+2g5op0. ERROR: Please contact your system administrator. ERROR: Add correct host key in /Users/huchangfeng/.ssh/known_hosts to get rid of this message. ERROR: Offending ECDSA key in /Users/huchangfeng/.ssh/known_hosts:42
原因:
这个错误消息表明你的 known_hosts 文件中存储的远程主机密钥与当前远程主机的密钥不匹配。这可能是由于远程主机重新生成了 SSH 密钥,或者是你连接到不同的主机而该主机使用了相同的 IP 地址。
为了修复这个问题,你需要从 known_hosts 文件中删除对应的条目。你可以使用以下步骤来解决这个问题:
步骤 1: 备份 known_hosts 文件
首先,备份你的 known_hosts 文件,以防出现任何问题:
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
步骤 2: 删除旧的主机密钥
你可以手动编辑 known_hosts 文件并删除对应的行,也可以使用 ssh-keygen 命令来删除。
-
手动编辑:
打开
known_hosts文件,找到包含152.32.214.95的行并删除它。可以使用任何文本编辑器,如nano或vi:nano ~/.ssh/known_hosts然后删除包含
152.32.214.95的那一行。 -
使用
ssh-keygen命令:使用
ssh-keygen -R命令删除对应的条目:ssh-keygen -R 152.32.214.95
步骤 3: 再次运行 ssh-copy-id
现在你可以再次运行 ssh-copy-id 命令来复制你的 SSH 公钥:
ssh-copy-id root@152.32.214.95
当你再次连接到该主机时,系统会询问你是否信任新的主机密钥。输入 "yes" 并继续。
步骤 4: 确认连接
确保你可以使用 SSH 连接到远程主机:
ssh root@152.32.214.95
结论
通过删除旧的主机密钥并添加新的主机密钥,你可以解决这个问题并成功使用 ssh-copy-id 将你的 SSH 公钥复制到远程主机。如果该主机的密钥频繁更改,可能需要检查是否存在潜在的安全问题。
mac笔记本 怎么安装 安装 sshpass
在 macOS 上安装 sshpass 工具,可以通过 Homebrew 包管理器来实现。以下是安装步骤:
-
安装 Homebrew(如果尚未安装):
打开终端并输入以下命令安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"按照屏幕上的提示完成安装过程。
-
安装
sshpass:使用 Homebrew 安装
sshpass:brew install esolitos/ipa/sshpass安装完成后,
sshpass工具将可用。 -
更新脚本:
现在你可以使用之前提供的脚本,并确保脚本中的
sshpass命令可以正常工作。以下是更新后的脚本示例:#!/bin/bash # 定义密钥文件路径 KEY_PATH="$HOME/.ssh/id_rsa" KNOWN_HOSTS_PATH="$HOME/.ssh/known_hosts" TARGET_IP="152.32.214.95" USER="root" PASSWORD="your_password" # 替换为实际密码 # 检查是否已经存在密钥对 if [ -f "$KEY_PATH" ] && [ -f "$KEY_PATH.pub" ]; then echo "SSH 密钥对已经存在:$KEY_PATH 和 $KEY_PATH.pub" else echo "SSH 密钥对不存在,正在生成新的密钥对..." ssh-keygen -t rsa -b 2048 -f "$KEY_PATH" -N "" echo "新的 SSH 密钥对已生成:$KEY_PATH 和 $KEY_PATH.pub" fi # 检查是否已经对指定 IP 免登录 if grep -q "$TARGET_IP" "$KNOWN_HOSTS_PATH"; then echo "已经对 $TARGET_IP 设置了免登录" else echo "未对 $TARGET_IP 设置免登录,正在执行 ssh-copy-id..." sshpass -p "$PASSWORD" ssh-copy-id "$USER@$TARGET_IP" echo "已成功对 $TARGET_IP 设置免登录" fi # 执行 ssh 命令 echo "正在连接 $TARGET_IP ..." sshpass -p "$PASSWORD" ssh "$USER@$TARGET_IP" -
赋予脚本执行权限:
确保脚本有执行权限:
chmod +x check_and_setup_ssh_key.sh -
运行脚本:
运行脚本来检查和设置 SSH 密钥对,并连接目标服务器:
./check_and_setup_ssh_key.sh
通过以上步骤,你可以在 macOS 上安装 sshpass 工具并使用它在脚本中实现自动输入密码的功能。