我有一个Python脚本,它使用sshpass
来对机器进行ssh访问
Popen(["sshpass","-p", "test!@#", "ssh", "-o UserKnownHostsFile=/dev/null", "-o StrictHostKeyChecking=no", "user1@192.168.10.1"])
但由于密码字段中存在特殊字符,此命令会引发一些错误。有没有办法可以在sshpass中使用带有特殊字符的密码或其他可以从Python调用的东西?
错误是:bash: !@#": event not found
答案 0 :(得分:2)
逃脱角色在我的案例中起作用。只需在'!'之前使用\
字符或其他特殊字符。
答案 1 :(得分:0)
Python不喜欢特殊字符。通过尾随\
转义符号或使用r"test!@#"
中的原始字符串。
答案 2 :(得分:0)
首先,将sshpass
与-p
选项一起使用意味着您将密码发布给同一台计算机上的任何人。这就像把你的房子钥匙放在你的地毯下。
错误消息来自用于执行上述命令的shell(可能是BASH)。字符!
被解释为特殊字符,意味着“查看我之后的文本的历史记录”。
问题很可能出现在sshpass
脚本中(因为您未在shell=True
中指定Popen()
)。您可以尝试通过确保使用正确的引用和转义来修复脚本。
另一种解决方案是将env={'SSHPASS': 'test!@#'}
传递给Popen()
,将sshpass
的环境设置为explained in the manpage:
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"
。
相关: