如何ssh到远程计算机并在shell脚本中执行文件计数并返回结果

如何ssh到远程计算机并在shell脚本中执行文件计数并返回结果

问题描述:

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

我还需要通过传递一个变量来在shell脚本中调用这个shell脚本,并将结果返回给python程序。

涉及的组件:

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

  2. 执行ssh来远程计算机并执行目录计数

  3. 结果返回到我原来的python program

+2

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

您可以使用subprocess.run函数执行SSH命令。 subprocess.run("ssh [email protected] 'grep ^d'"),但它涉及到传递密码变得棘手。所以你有几个选择。

选项A: 使用SSH密钥。 subprocess.run("ssh [email protected] -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 [email protected] -pw your_password 'grep ^d'") 在Linux/Mac上,使用sshpasssubprocess.run("sshpass --password 'your_password' ssh -oStrictHostKeyChecking=no [email protected] 'grep -d'") 缺点是Windows用户将不得不安装Putty,并且由于您传递的是密码而不是SSH密钥,因此安全性会降低。

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

选项D: 如果尚未完成SSH脚本的创建和复制,您的脚本将处理该脚本。系统会提示用户输入一次SSH密码,之后您可以使用选项A进行所有进一步通信。我从来没有这样做过,但它可以工作。缺点是将这个解决方案放在一起需要花费时间。