![scp 在命令行中有效,但在 shell 脚本中无效 - 权限被拒绝](https://linux22.com/image/1291988/scp%20%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%97%A0%E6%95%88%20-%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D.png)
我正在使用 scp 将一些主文件夹从一个 Linux 机器迁移到另一个。我已将公钥保存到目标机器的 authorized_keys 文件中,当我在命令行中输入以下命令时,它运行正常:
scp myArch.tar root@myOtherServer:/root/dumps
...但是当我将其放入这样的脚本中时......
#!/bin/bash
tar -cf /tmp/$1.tar $1; wait
scp /tmp/$1.tar root@myOtherServer:/root/dumps
..并通过传递文件夹名称作为参数来调用它,我收到以下错误。
[root@myHost home]# /root/migrate myHomeFolder
Permission denied (publickey).
lost connection
您知道可能是什么问题吗?
答案1
尝试使用 sudo ./script.sh 执行脚本可能是因为您正在写入 /root
答案2
这很可能是由于 shebang 启动了 bash shell 的新实例,而其中尚未设置 ssh-agent。为了确保安全,您可以在脚本顶部添加以下行:
ssh-add -l >> $HOME/ssh.log 2>&1
运行脚本并检查 ssh.o 中的内容