2

sshpassマシンへの ssh アクセスに使用する Python スクリプトがあります

Popen(["sshpass","-p", "test!@#", "ssh", "-o UserKnownHostsFile=/dev/null", "-o StrictHostKeyChecking=no", "user1@192.168.10.1"])

しかし、パスワード フィールドに特殊文字が存在するため、このコマンドは何らかのエラーをスローしています。sshpass または Python から呼び出すことができるその他のもので特殊文字を含むパスワードを使用できる方法はありますか?

エラーは次のとおりです。bash: !@#": event not found

4

3 に答える 3

3

私の場合、エスケープ文字が機能しました。\「!」の前に文字を使用するだけです または他の特殊文字。

于 2016-04-22T08:35:58.710 に答える
1

Python は特殊文字が好きではありません。シンボルを末尾でエスケープするか、\in のような生の文字列を使用しr"test!@#"ます。

于 2014-09-29T15:39:47.337 に答える
1

まず、sshpassこのオプションを使用すると-p、パスワードを同じマシン上の他のユーザーに公開することになります。家の鍵を敷物の下に置くようなものです。

エラーメッセージは、上記のコマンドを実行するために使用されているシェル (おそらく BASH) からのものです。この文字!は特殊文字として解釈され、「履歴で私の後のテキストを探す」ことを意味します。

問題はスクリプト内にある可能性が最も高いです (で指定しsshpassなかったため)。スクリプトが適切な引用符とエスケープを使用していることを確認することで、スクリプトの修正を試みることができます。shell=TruePopen()

もう1つの解決策は、マンページで説明されているように、に渡しenv={'SSHPASS': 'test!@#'}Popen()環境を設定することです。sshpass

cmd = ['sshpass', '-e', 'ssh', '-o', 'UserKnownHostsFile=/dev/null', ...]
env = os.environ.copy()
env['SSHPASS'] = 'test!@#'
Popen(cmd, env=end)

注: を に分割する必要があり"-o key=value"ます"-o", "key=value"

関連している:

于 2014-09-30T09:54:48.330 に答える