从本地 Mac 远程执行 Linux 机器上的脚本

185 阅读4分钟

要从本地 Mac 远程执行 Linux 机器上的脚本 /root/weixin-article-start.sh,可以使用 ssh 命令。你需要确保在 Linux 机器上设置了 SSH 访问权限,并且你有适当的凭据来登录该机器。

步骤 1:配置 SSH 访问

  1. 确保 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
      
  2. 检查 SSH 服务器状态

    • 确认 SSH 服务器正在运行:
      sudo systemctl status ssh
      
  3. 在远程机器上创建或配置 SSH 密钥(可选)

    • 如果你希望通过密钥而不是密码来进行身份验证,可以在本地 Mac 生成 SSH 密钥对,并将公钥添加到远程机器的 ~/.ssh/authorized_keys 文件中。

步骤 2:在本地 Mac 远程执行脚本

使用 ssh 命令从本地 Mac 连接到远程 Linux 机器并执行脚本:

ssh root@47.111.1.177 'bash /root/weixin-article-start.sh'

详细步骤

  1. 打开终端:在本地 Mac 上打开一个终端窗口。

  2. 使用 SSH 命令连接并执行脚本

    ssh root@47.111.1.177 'bash /root/weixin-article-start.sh'
    
  3. 输入密码:如果没有配置 SSH 密钥,系统会提示你输入远程机器的 root 用户密码。

使用 SSH 密钥认证(可选)

  1. 在本地 Mac 上生成 SSH 密钥

    ssh-keygen -t rsa -b 2048
    
  2. 将公钥复制到远程 Linux 机器

    ssh-copy-id root@47.111.1.177
    
  3. 使用 SSH 密钥认证执行脚本

    ssh -i ~/.ssh/id_rsa root@47.111.1.177 'bash /root/weixin-article-start.sh'
    

脚本执行确认

在远程服务器上,你可以通过以下方式确认脚本是否成功执行:

  1. 检查脚本日志:如果你的脚本有日志输出,检查相关日志文件。
  2. 查看进程:使用 pstop 命令查看脚本相关的进程是否正在运行。
  3. 手动检查脚本效果:如果脚本执行会产生一些可见的效果(如文件生成、服务启动),可以手动检查这些效果是否存在。

通过上述步骤,你可以方便地从本地 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 命令来删除。

  1. 手动编辑

    打开 known_hosts 文件,找到包含 152.32.214.95 的行并删除它。可以使用任何文本编辑器,如 nanovi

    nano ~/.ssh/known_hosts
    

    然后删除包含 152.32.214.95 的那一行。

  2. 使用 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 包管理器来实现。以下是安装步骤:

  1. 安装 Homebrew(如果尚未安装):

    打开终端并输入以下命令安装 Homebrew:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    

    按照屏幕上的提示完成安装过程。

  2. 安装 sshpass

    使用 Homebrew 安装 sshpass

    brew install esolitos/ipa/sshpass
    

    安装完成后,sshpass 工具将可用。

  3. 更新脚本

    现在你可以使用之前提供的脚本,并确保脚本中的 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"
    
  4. 赋予脚本执行权限

    确保脚本有执行权限:

    chmod +x check_and_setup_ssh_key.sh
    
  5. 运行脚本

    运行脚本来检查和设置 SSH 密钥对,并连接目标服务器:

    ./check_and_setup_ssh_key.sh
    

通过以上步骤,你可以在 macOS 上安装 sshpass 工具并使用它在脚本中实现自动输入密码的功能。