bash - 无法通过 ssh 执行 screen : Must be connected to a terminal

标签 bash ssh gnu-screen

我有一组服务器,我想在每台服务器上启动专用的 Python 脚本。 我的计算机名称列表存储在 $COMPUTERS 变量中,为了部署我的脚本,我尝试使用 SSH 连接并启动 screen 实例

for ((i = 0; i < ${#COMPUTERS[@]}; i++)); do
  echo ""
  echo ">> Start simulations on computer ${COMPUTERS[i]}..."
  ssh -o "StrictHostKeyChecking=accept-new" ${COMPUTERS[i]} "
    cd ${WORKING_DIRECTORY}/compressor && git pull;
    screen -S ${SCREEN_NAME} -X quit > /dev/null;
    echo 'Start screen ${SCREEN_NAME} on ${COMPUTERS[i]}';
    screen -dmS ${SCREEN_NAME} ' \
      export LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:${WORKING_DIRECTORY}/venv/lib/\" && \
      ${WORKING_DIRECTORY}/venv/bin/python ${WORKING_DIRECTORY}/deployment/simulations/simulate.py ${i} > ~/output_${COMPUTERS[i]}.txt \
    ';
    screen -r;
    "

  echo "Done for ${COMPUTERS[i]}"
done

但是,没有启动 screen 实例,我唯一的消息是:

Start screen sim on pc-elec.priv

Must be connected to a terminal.

最佳答案

您需要强制伪终端。

SSH Man page

-t' Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

例如:

ssh -t -o "StrictHostKeyChecking=accept-new" ${COMPUTERS[i]}

关于bash - 无法通过 ssh 执行 screen : Must be connected to a terminal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72531848/

相关文章:

python - 创建命令 Python 的输出

java - 在 bash screen 命令中启动 Spring 应用程序是一个好习惯吗?

linux - 删除最后一个字段的基于整行的值

linux - 如何在 LINUX 的非交互模式下限制 top 命令输出中的行数

linux - 如何根据大小或内容递归删除 .htaccess 文件

linux - 为什么使用远程 Linux 桌面进行开发?

linux - 在每个 bash 创建一个命令后在 screen 上运行命令

bash - 运行 bash 初始化脚本的 GNU Screen

linux - 创建与其他文件相关的符号链接(symbolic link)

linux - 如何捕获 glob 运算符(operator)的权限被拒绝错误?