让 ssh 从 stdin 读取密码
执行像 ssh、scp 这类 secure command 时,必须手工输入密码,而且它们是直接从 /dev/tty 而不是 stdin 中读取密码的,这也意味着无法通过重定向 IO 的方式传送密码給这些程序,查了一下网上一般的解决方案是借助 paramiko
或 pexpect
这两个第三方库来解决的。
但安装第三方库对于不能随意访问互联网的环境来说是很麻烦的一件事情。
其实就这个应用场景来说,完全没必要用到第三方库,python 自带一个名为 pty 的 modual,它有一个 spawn 函数,manual 中对它的描述是:
pty.spawn(argv[, master_read[, stdin_read]])
Spawn a process, and connect its controlling terminal with the current process’s standard io. This is often used to baffle programs which insist on reading from the controlling terminal.
这就好办了,我们只要创建一个名为 pty-process.py 脚本,在这个脚本中用 pty.spawn 调用 secure command,然后再通过写入该脚本 stdin 的方式就可以变相地給这些 secure command 发送密码了。
pty-process.py 脚本的实现如下:
#!/bin/env python3 import pty import sys pty.spawn(sys.argv[1:])
借助于这个 pty-process.py 我们可以这样执行 secure command 了
echo $passwd |pty-process.py ssh $usr@$remote $command
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: xterm 使用简介
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论