SSHコマンドで引用符とアポストロフィをエスケープする

SSHコマンドで引用符とアポストロフィをエスケープする

SSH経由で次のコマンドを実行したいと思います。

echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt

私は次のことをしようとしています:

ssh 127.0.0.1 -T "echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt"

私は次のようにPythonサブプロセスを使用します。

command = "echo \"trap '/tmp/test &' 2 9\" >> /tmp/output.txt"
addtrap = 'ssh root@' + rhost + ' -T "' + command + '"'
subprocess.Popen(addtrap, shell=True)

しかし、明らかに引用符とアポストロフィを含むいくつかのバグが見つかりました。この問題を回避するにはどのようなオプションがありますか?

ベストアンサー1

信頼できる方法は次のとおりです。

ssh 127.0.0.1 sh << "EOF"
echo "trap '/tmp/test &' INT" >> /tmp/output.txt
EOF

これにより、どのシェルが得られるのかがわかります。これはshリモートユーザーのログインシェルではなく、何でも簡単にコードを渡すことで、sh引用を心配することなくそのまま解釈できます。

(しかし、絶対に使用したくないかもしれません。望むかもしれませんが、-T対話-t型アプリケーション(例:vi対話型シェル)を実行したい場合は、通常、SIGKILLをキャプチャできない信号9は信号名を使用することをお勧めします。数値ではありません) 。

おすすめ記事