私はPythonからいくつかのSSHコマンドを送信しようとしています。それはかなりうまくいくが、引用符が入れ子になるとすぐに混乱する。ssh with Python:エスケープと引用符で正しく取得する方法
だから私はちょうど行う非常に基本的な状況に:今
cmd = "ssh -A -t [email protected] \"do_on_host\"")) # notice the escaped quotes
Popen(cmd, ..., shell=True)
、より複雑な状況で、私は、ユーザーが指定したコマンドを使用したいと思います。私は、ユーザコマンドを中心に、ユーザーコマンドで引用符をエスケープしていることに注意してください:私は2つのホップ上でsshをしようとすると、それも悪くなる
user_cmd = "prog -arg \"a string arg\""
cmd = "ssh -A -t [email protected] \"do_on_host; " + user_cmd + "\"")) # notice the escaped quotes
Popen(cmd, ..., shell=True)
。私はエスケープに追加の単一引用符と二重引用符で何かをしようとしたことに注意してください:
user_cmd = "prog -arg \"a string arg\""
cmd = "ssh -A -t [email protected] \"ssh -A -t [email protected] '" + user_cmd + "' \""
Popen(cmd, ..., shell=True)
それがさらに悪化得ることができる:スニペットは次のように、user_cmd
は、コンソールからで読まれるかもしれないスクリプトdo_over_ssh.py
で使用される可能性があります:
$ ./do_over_ssh.py my_cmd -arg "a string arg"
結局、私は完全に混乱しています。
Python 3.5でネストされた引用符を扱うには、標準的でクリーンな方法はありますか?
(重要なお知らせ:!他の回答は、Python 2.7のためのものです)
Fabric3を使用してリモートユーザコマンドを実行してみませんか?マルチホップもここで述べたように動作しますhttps://stackoverflow.com/questions/20658874/how-to-do-multihop-ssh-with-fabric –