我有两个几乎相同的脚本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
。