无法通过SSH执行屏幕:必须连接到终端

发布于 2025-02-05 07:57:15 字数 986 浏览 3 评论 0原文

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

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

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

启动屏幕sim在pc-elec.priv

必须连接到终端。

I have a set of servers and I want to launch a dedicated Python script on each one.
My computer name list is stored into a $COMPUTERS variable, and to deploy my script, I am trying to connect using SSH and launch a screen instance

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

But, no screen instance is launched, and the only message I have is :

Start screen sim on pc-elec.priv

Must be connected to a terminal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

李不 2025-02-12 07:57:15

您需要强制伪终端。

ssh man page

-t'力伪分配。这可用于在远程计算机上执行基于屏幕的任意程序,这在实现菜单服务时可能非常有用。即使SSH没有本地tty,多个-t选项强制tty分配。

例如:

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

You need to force Pseudo 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.

For Example:

ssh -t -o "StrictHostKeyChecking=accept-new" ${COMPUTERS[i]}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文