【问题标题】:ssh using python(without paramiko and fabric)ssh 使用 python(没有 paramiko 和 fabric)
【发布时间】:2016-06-12 08:57:57
【问题描述】:

我需要编写一个 python 脚本来进行从一台服务器到另一台服务器的 ssh 登录。不幸的是,这些服务器没有任何互联网连接,我无法下载软件包。 我已经使用 python 子进程编写了以下代码,但是一旦执行了 ssh 命令,stdin.write 就不会输入密码。 我也尝试过 p.communicate 但无济于事。 请在不使用 paramiko 或 fabric 的情况下帮助我在此脚本上进行 ssh。

cmd = "ssh root@17.10.14.243"
p = subprocess.Popen(cmd, stdin = subprocess.PIPE, stdout =  subprocess.PIPE, stderr =  subprocess.PIPE, bufsize = 1,shell = True)
p.stdin.write("Pass")

【问题讨论】:

  • 你能在另一台电脑上下载fabric并安装在你的服务器上吗?我在工作中遇到了同样的问题并以这种方式解决了。
  • 我可以试试看。我将如何使用下载的文件在 linux(red hat)上安装 fabric。谢谢

标签: python linux ssh


【解决方案1】:

我希望这不是您问题中的真实密码!

ssh 不会从stdin 读取密码,因此使用p.communicate 或各种写入很遗憾是行不通的。

如果总是这两台机器,你可以确保它们都有 ssh 身份,然后制作一个authorized_keys 文件。如果您在使用ssh-keygen 创建 ssh 身份时没有设置密码,并且该密钥在另一个 user@host 的authorized_keys 文件中,那么您将无需密码即可进入:

ssh-keygen -t rsa 
ssh-copy-id user@other-host 

如果您的系统上不存在ssh-copy-id,那么您希望将$HOME/.ssh/id_rsa.pub 的内容放入其他主机的$HOME/.ssh/authorized_keys 文件中(可以有多个条目)

还有ssh-askpass,如果您的系统上安装了它。如果 ssh 在没有附加终端的情况下运行,则将 SSH_ASKPASS 环境变量设置为脚本的名称将运行该脚本以获取要使用的密码。所以如果/path/to/myscript 打印出mypassword,那么export SSH_ASKPASS=/path/to/myscript 将在没有可用终端时使用mypassword

这两个选项都有其安全问题,因此这取决于您所拥有的环境以及您最担心的问题。

【讨论】:

  • 感谢您的回复。遗憾的是我没有安装 SSH_ASKPASS。一旦启动了 ssh 连接并输入了密码,就会生成相应的日志。这个日志是我必须验证的。因此输入密码是强制性的。而且 IP 也会因所使用的服务器而异。
  • 使用 ssh 身份信任的登录仍然会被记录,如果有任何用处的话。
猜你喜欢
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2012-05-31
  • 2022-01-08
  • 1970-01-01
  • 2011-12-31
相关资源
最近更新 更多