我想我可能一直在谷歌上搜索这些东西,但是我想知道我是否可以让我的覆盆子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
我可能会误解这一切,甚至可能执行命令并在上面的对话框中显示。
答案 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")