使用远程评估通过 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 将执行它们。
我正在尝试 运行 通过 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 将执行它们。