ssh 密钥身份验证无法通过网络/if-up.d/脚本进行工作

ssh 密钥身份验证无法通过网络/if-up.d/脚本进行工作

我有两个几乎相同的脚本network/if-up需要访问 SSH 密钥。 SSH 私钥的权限为 600,那么我的脚本如何访问这些密钥?

我更愿意保留与我为这些脚本执行的任务设置的用户帐户关联的 SSH 密钥。

我不知道如何找到运行脚本的用户network/if-up,而且我也没有尝试su -l -c "my_command" mytaskuser在我的脚本中使用。希望我只是犯了一个简单的错误。

在 Ubuntu 上,我的脚本位于/etc/network/if-up.d其他发行版(例如 openSuse)中,它们位于etc/sysconfig/network/if-up.d.

我的两个脚本看起来都与此类似(我将仅使用一个示例来集中问题):

#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log
exit 0

如果我以 mytaskuser 身份登录并手动运行该脚本,该脚本将完全正常工作。当从if-up.d/.

我尝试过这样的变化:

#!/bin/sh
LOGDATE="_`date +%Y-%m-%d_%H%M`"
su -l -c "scp -i /home/mytaskuser/.ssh/id_rsa /home/mytaskuser/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser
exit 0

那没有用。该脚本工作的唯一方法是当我以拥有 SSH 密钥 (id_rsa) 的用户身份登录时运行它。

答案1

如果您scp以 root 身份运行,那么它会在 root 的主目录中查找文件,包括该known_hosts文件。如果服务器的公钥不在 中~/.ssh/known_hosts,则 ssh 会提示用户询问是否添加密钥。如果没有终端提示用户,ssh 会拒绝连接,因为它无法确保主机是正确的。

您应该scp以您自己的用户身份运行 ( mytaskuser)。

su -c "scp -i ~/.ssh/id_rsa ~/some.log  [email protected]:somelog${LOGDATE}.log" mytaskuser

不要将-l选项传递给su: 来运行登录 shell,这会忽略通过 传递的命令-c

相关内容