Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 自动登录raspberry pi(使用wifi路由器连接)并运行命令_Bash_Raspberry Pi - Fatal编程技术网

Bash 自动登录raspberry pi(使用wifi路由器连接)并运行命令

Bash 自动登录raspberry pi(使用wifi路由器连接)并运行命令,bash,raspberry-pi,Bash,Raspberry Pi,我是一名Mac用户,我想将ssh密码输入Raspberry pi的过程自动化,运行一些命令并将文件传输到本地计算机。我不熟悉bash脚本,想知道我的代码的一般结构应该是什么样的。我使用wifi路由器连接到pi,因此当我打开终端时,它会自动询问我密码 编辑:我可以在bash脚本中使用sshpass,但是下面的命令(如top和kill)无法执行。事实上,在我将sshpass输入我的pi之后,它会等待我在终端中输入命令。以下是我的shell脚本代码: #!/bin/bash sshpass -p 'r

我是一名Mac用户,我想将ssh密码输入Raspberry pi的过程自动化,运行一些命令并将文件传输到本地计算机。我不熟悉bash脚本,想知道我的代码的一般结构应该是什么样的。我使用wifi路由器连接到pi,因此当我打开终端时,它会自动询问我密码

编辑:我可以在bash脚本中使用sshpass,但是下面的命令(如top和kill)无法执行。事实上,在我将sshpass输入我的pi之后,它会等待我在终端中输入命令。以下是我的shell脚本代码:

#!/bin/bash
sshpass -p 'raspberry' ssh -o StrictHostKeyChecking=no  pi@192.168.0.101
ssh -t pi@192.168.0.101 'sudo killall RPI_Log px4'

在脚本中,您应该能够执行以下操作:

#Run`运行命令`
sshpass-pwhatever-sshuser@host运行命令
mkdir复制的文件
#将“主机”上的“文档”递归复制到此计算机上的“复制的文档”。
sshpass-pwhatever scp-ruser@host:文件复制文件
不过,无密码密钥对可能比脚本中的密码更安全,即使它不是高度安全性。创建密钥对并在计算机和Raspberry Pi上进行设置后,您还可以在Mac上编辑
~/.ssh/config
,如下所示:

主机*
是的
压缩水平9
自动控制主机
ControlPath~/.ssh/.socket-%r@%h:%p
控制持续60
ServerAliveInterval 15
主pi
主机名192.168.0.101
用户pi
IdentityFile~/.ssh/id_rsa

现在,您可以使用
ssh-pi命令运行
scp-rpi:Documents-copied-Documents
。请注意,
sshpass
不再需要,
pi
pi@192.168.0.101
。另外,如果用户名或主机发生更改(或者您想添加另一个),则只需更新
~/.ssh/config
user@host组合)。

如果运行
ssh会发生什么user@hostecho hello
?如果您编写您使用的命令,它将更有帮助。因此我基本上自动登录到pi。然后我必须键入“exit”,它会重新登录,但要求我手动键入密码,打印hello并退出pi。在执行sshpass命令后,您能检查一下ssh-t是否
pi@192.168.0.101“echo | sudo-S killall RPI_Log px4”提供结果?sshpass正在按预期让您登录,但您没有传递要执行的命令,因此,它让您登录到一个交互式会话(因此需要退出)。第二行有您想要的命令,但没有用sshpass包装。尝试将远程命令(sudo…?)放在sshpass行的末尾。因此,我假设scp复制了我需要的文件,但我也可以以类似的方式使用kill命令吗?@YuktiKathuria Yes,在远程主机上,
ssh上执行
kill
pi@192.168.0.101杀死任何东西
。要停止scp,只需按Ctrl+C。