在raspberry pi中登录的脚本

问题描述 投票:1回答:2

我试着编写一个非常小的脚本,以便连接到我的raspberrypi,如下所示:

#!/usr/bin/python
#connect to raspberry pi -- ethernet
import os
os.popen('ssh -l pi 169.254.249.166')

但它返回只是立即打印我的密码提示三次 - 我不能写任何东西,我不知道为什么。

在请求之后我就可以推送Intro并返回给我提示。

脚本的输出如下:

 xxx@xxx:~$ python connect_raspberry.py
 xxx@xxx:~$ [email protected]'s password: 
 xx@xx:~$ [email protected]'s password: 
 Permission denied, please try again.
 [email protected]'s password: 
 Permission denied, please try again.
 [email protected]'s password: 
 Permission denied (publickey,password).`

为什么脚本,或者我从提示中猜测的Raspberry,让我输入密码?它只是回答“许可被拒绝”,但我没有输入任何内容。

我真正尝试编写的是在konsole中运行脚本:python code.py并且它返回给我到Rasp提示符(我想我应该将密码写入变量但是首先,我尝试自动登录并写入密码) :

xx@xx:~$ python code.py
[email protected]'s password: 
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: Sun Sep 17 23:16:57 2017 from peces.local
pi@raspberrypi:~ $

另一方面,任何有关如何将密码写入Python脚本中的变量以自动登录的帮助,我的意思是:

xxx@xxx:~$ python connect_raspberry.py
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: Sun Sep 17 23:16:57 2017 from peces.local
pi@raspberrypi:~ $

对于后者,我不太了解ssh命令的-f选项(这个标志意味着-n标志)。如果它是我自动登录所需要的,我有点困惑。

python logging raspberry-pi debian
2个回答
0
投票

os.popen('command')没有将command的标准输入连接到你的控制台(你的键盘和显示器),它只是在Python程序中启动一个进程并等待Python与它通信。

os.popen()very old and long since obsolete;你想避免这种情况,并使用更现代的东西。 Python 3.6文档建议subprocess.run()或类似的东西,但与一个裸subprocess与SSH交互仍然是棘手和麻烦 - 你真的想使用一个知道如何做到这一点的专用库。有人在评论中建议paramiko,我同意,但也许也可以探索pexpect

import paramiko

ssh = paramiko.SSHClient()
ssh.connect('169.254.249.166', 22, 'pi', 'xyzzy')
stdin, stdout, stderr = ssh.exec_command('python code.py')
# ... interact with your script
ssh.close()

基本上是从here复制/粘贴。

这里没有“konsole”,唯一的接口是连接到网络而不是终端窗口的远程ssh会话。 (如果你的脚本不是交互式的,那很多都是不必要的,真的。那么来自shell的ssh pi python code.py >output!)


0
投票

谢谢你的有用答案。

我一直在写不同的代码,我有这个:

#!/usr/bin/python
#connect to raspberry pi by ethernet

import paramiko

try:
    ssh=paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.connect('169.254.249.166', 22, 'pi','raspberry')

except SSHException:
      print('error')

stdin, stdout, stderr= ssh.exec_command('cat /etc/motd')

print(stdout.read().splitlines())

var=''
stdin, stdout, stderr= ssh.exec_command('who')

data=stdout.read()
print(data)

while (var!='close'): # loop until close passphrase

print('type a command.')
var=input('>> ')

stdin, stdout, stderr= ssh.exec_command(var)

print('read --> ', stdout.read().splitlines())

print('error --> ', stderr.read())


ssh.close()

运行此代码我可以登录raspberrypi并执行不同类型的命令(但不是所有可用的命令)。

例如,我不能在文件夹之间移动,我的意思是,如果我键入:cd视频到'var'。 stdout是[],甚至pwd命令总是返回相同的路径:/ home / pi

它是输出:

xx@xx:~$ python connect_raspberry.py 
[b'', b'The programs included with the Debian GNU/Linux system are free                   software;', b'the exact distribution terms for each program are described in the', b'individual files in /usr/share/doc/*/copyright.', b'', b'Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent', b'permitted by applicable law.']
b'pi       tty1         2017-09-20 10:17\npi       :0                2017-09-20 10:17 (:0)\n'

type a command.
>> cd Videos
read -->  []
error -->  b''

type a command.
 >> pwd
 read -->  [b'/home/pi']
 error -->  b''

 type a command.
 >> 

连接到树莓是我正在寻找,但为什么它不是完全有用?我的意思是,为什么有些命令不起作用,比如cd ..或cd / home甚至sudo su

此外,我试图将文件从覆盆子复制到我的电脑,但它没有运行:

>> sudo cp salida.txt /home/my_user  
read -->  []
error -->  b''

type a command.
 >> 

在我的电脑不是salida.txt

再次,感谢您的回答,我得到了我需要但现在出现了新的问题

© www.soinside.com 2019 - 2024. All rights reserved.