【问题标题】:How to ssh to a remote machine and perform file counting in a shell script and return the result如何 ssh 到远程机器并在 shell 脚本中执行文件计数并返回结果
【发布时间】:2018-02-09 23:14:34
【问题描述】:

我需要计算远程机器目录中的文件数。我需要 ssh 到那台机器并执行目录计数操作(-lR | grep ^d | wc -l)。这需要在 shell 脚本中完成。

我还需要从 python 程序调用这个 shell 脚本,方法是传递一个要在 shell 脚本中使用的变量并将结果返回给 python 程序。

涉及的组件:

  1. 调用 shell 脚本的 Python 程序(传递变量)

  2. 对远程机器执行 ssh 并执行目录计数

  3. 将结果返回给我原来的python程序

【问题讨论】:

  • SO 不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其正常工作,请发布您尝试过的内容,我们将帮助您修复它。尝试分别处理每个组件,然后将它们放在一起。

标签: python bash shell ssh subprocess


【解决方案1】:

您可以使用subprocess.run 函数来执行SSH 命令。 subprocess.run("ssh user@host 'grep ^d'"),但是在传递密码时变得很棘手。所以你有几个选择。

选项 A: 使用 SSH 密钥。 subprocess.run("ssh user@host -i /path/to/priv_key 'grep ^d'")。或者更好的是,add the SSH key to your SSH config file,所以你可以简单地做ssh some_identifier 'grep^d'。缺点是此方法仅适用于您的计算机。

选项 B: 在 Windows 上,安装 Putty,并使用 -pw 开关输入密码。 subprocess.run("putty -ssh user@host -pw your_password 'grep ^d'") 在 Linux/Mac 上,使用 sshpasssubprocess.run("sshpass --password 'your_password' ssh -oStrictHostKeyChecking=no user@host 'grep -d'") 缺点是 Windows 用户必须安装 Putty,而且由于您传递的是密码而不是 SSH 密钥,因此安全性较低。

选项 C: 使用 Python 库 Paramiko。有关如何执行此操作的信息,请参阅他们的文档,但是,我发现他们的库不是最直观的。尤其是在标准输入、标准输出和标准错误上传递和查看数据时。您还引入了第三方依赖项。 Paramiko 可以使用密码或 SSH 密钥。

选项 D: 如果尚未完成,请让您的脚本处理创建和复制 SSH 密钥到服务器。系统将提示用户一次输入他们的 SSH 密码,然后您就可以使用选项 A 进行所有进一步的通信。我以前从未这样做过,但它可以工作。缺点是整合这个解决方案需要时间。

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多