我尝试在同一网络中的两个 rpi 之间复制文件。按照许多教程中的提示安装了公钥。直接从终端调用 ssh 或 scp 命令时,无需输入密码。从 bash 脚本运行相同的命令时,它会要求输入密码。
我感到很困惑,因为大多数人似乎在使用密钥运行 ssh/scp 时都遇到了问题 - 但这个却运行正常。这看起来像是终端/bash 的区别。
脚本如下:
脚本:
#!/bin/bash
sudo scp /home/pi/file.txt [email protected]:/home/pi/foo/
它由执行
$sudo ./script
我感谢您的帮助!
答案1
所有教程的问题在于它们可能遵循不同的方法。我通常这样做。
由于您使用 sudo(根据问题的编辑)来执行脚本,因此脚本将以 root 身份运行。而不是以您自己的用户身份运行。
这意味着您需要在`blueberry ass 上的 root中添加 root 的公钥(位于/root/.ssh/id_rsa.pub
) !strawberry
authorized_keys
假设我们有两个 Pi,我们称它们strawberry
为blueberry
。Strawberry
是 ssh 客户端,blueberry
是服务器。应该用您的登录名替换。
在strawberry
:
cd
mkdir .ssh
chown <my name> .ssh
chmod 700 .ssh
ssh-keygen
cp .ssh/id_rsa.pub /tmp/nice_filename
sudo -s
cd ~root
mkdir .ssh
chown root .ssh
chmod 700 .ssh
ssh-keygen
cat .ssh/id_rsa.pub >> /tmp/nice_filename
chmod a+r /tmp/nice_filename
exit
scp /tmp/nice_filename blueberry: # and enter the password for blueberry
ssh-keygen
可能会要求输入密码。如果您真的完全信任您的环境,您可以选择将密码留空。如果您不将密码留空,则需要提供该密码来解锁密钥。
因此,通常我只需输入,而将密码留空。
在blueberry
:
cd
mkdir .ssh
chown <my name> .ssh
chmod 700 .ssh
cat nice_filename >> .ssh/authorized_keys
chown <my name> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
sudo -s
mkdir ~root/.ssh
chown root.root ~root/.ssh
chmod 700 ~root/.ssh
cat nice_filename >> ~root/.ssh/authorized_keys
chown root ~root/.ssh/authorized_keys
chmod 600 ~root/.ssh/authorized_keys
除了cat id_rsa.pub >> .ssh/authorized_keys
,您还可以mv id_rsa.pub .ssh/authorized_keys
,但只有当它确实是您的第一个密钥或者您想要删除现有密钥时,您才应该这样做。
下一篇strawberry
:
ssh blueberry ls /tmp
ssh root@blueberry ls /usr
sudo ssh blueberry ls /var
瞧!
答案2
使用 时,你把事情搞砸了sudo
。你使用的原因sudo
不清楚。基本上,你似乎只是想做:
脚本:
#!/bin/bash
scp /home/pi/file.txt [email protected]:/home/pi/foo/
并启动脚本
./script