使用远程评估通过 SSH 执行远程命令

Execute a remote command over SSH with remote evaluation

我正在尝试 运行 通过 SSH 执行命令,并希望在远程计算机上对命令中的表达式求值。

我正在尝试 运行 这个:

ssh -A username@ip "sudo docker exec -it "$(docker ps | grep 'some' | awk '{ print  }')" python manage.py shell"

但是当我使用 ssh 命令时,表达式 $(docker ps | grep 'some' | awk '{ print }') 在远程计算机上的计算不正确。

确认一下,如果我先通过 ssh 连接到远程机器,然后 运行 sudo docker exec -it "$(docker ps | grep 'some' | awk '{ print }')" python manage.py shell,它会正确评估并成功地为我提供 shell。作为 ssh 命令的参数的一部分,我无法直接从我的本地计算机让它工作。

我该怎么做才能让它作为 ssh 命令的一部分工作?


执行以下命令的问题是我从我的终端 (iTerm) 收到一条 Pseudo-terminal will not be allocated because stdin is not a terminal. 消息,但在执行此命令后没有收到我期望的 shell .

ssh -A username@ip <<'EOL'
    name="$(docker ps | grep 'some' | awk '{ print  }')"
    docker exec -it $name python manage.py shell
EOL

您需要像这样转义所有需要由远程 shell 解释的字符:

ssh -A username@ip "sudo docker exec -it \"$(docker ps | grep 'some' | awk '{ print $1 }')\" python manage.py shell"

这样您将发送属于 -it 参数的引号,以及不变的 $ 符号,远程 shell 将执行它们。