成功进行SSH连接后执行命令

时间:2014-07-11 19:38:12

标签: python linux ssh terminal raspberry-pi

我想我可能一直在谷歌上搜索这些东西,但是我想知道我是否可以让我的覆盆子Pi在通过SSH连接后执行命令。

工作流: 1)SSH通过终端进入Pi 2)登录后,Pi执行命令以显示当前温度(我已经知道此命令)

pi已经输出

Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jul 11 15:11:35 2014

我可能会误解这一切,甚至可能执行命令并在上面的对话框中显示。

4 个答案:

答案 0 :(得分:1)

你正在寻找的是各种Linux发行版中常见的标题。这不是python(但可以)。 motd通过SSH在登录时运行多个命令,并构造一条消息,并将其输出给用户。有关这方面的更多信息(实际上已列出温度)可在此处找到:Rapberry Pi Welcome Message。问题是这可能会略有变化,具体取决于Linux发行版。一个好的git repo有一个很好的消息也可以在这里找到:Raspberry Pi Motd

答案 1 :(得分:0)

是的,这可以做到。我所知道的方法使用subprocess https://docs.python.org/2/library/subprocess.html。只要知道python脚本的名称和参数(如果有的话),就可以将它们传递给subprocess。以下是如何通过python ssh脚本(取自http://python-for-system-administrators.readthedocs.org/en/latest/ssh.html)连接的示例:

    import subprocess
    import sys

    HOST="www.example.org"
    # Ports are handled in ~/.ssh/config since we use OpenSSH
    COMMAND="uname -a"

    ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                   shell=False,
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)
    result = ssh.stdout.readlines()
    if result == []:
        error = ssh.stderr.readlines()
        print >>sys.stderr, "ERROR: %s" % error
    else:
        print result

答案 2 :(得分:0)

只需将命令附加到ssh-command。

ssh user@server "echo test"

"echo test"在远程计算机上执行。

答案 3 :(得分:0)

您可以通过在shh命令之后放置命令,从bash执行命令而无需实际登录到其他计算机:

$ ssh pi@pi_addr touch wat.txt

会创建文本文件〜/ wat.txt。

这对于自动化来说有点麻烦,但是因为必须提供密码才能在您的计算机上设置公共/私有RSA密钥,以便能够在没有密码的情况下远程登录您的pi。只需执行以下操作:

$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/a/.ssh/id_rsa):
    Created directory '/home/a/.ssh'.
    Enter passphase (empty for no passphrase):
    Enter the same passphrase again:
$ssh pi@pi_addr mkdir -p .ssh
$cat .ssh/id_rsa.pub | ssh pi@pi_addr 'cat >> .ssh/authorized_keys'

请勿输入密码并在运行ssh-keygen时将所有内容保留为默认值。现在你可以输入ssh pi @ pi_addr而无需输入密码。

示例python文件:

import subprocess

SERVER = "pi@pi_addr"
subprocess.call("ssh pi@pi_addr touch wat.txt")