我有密钥设置所以ssh进入远程主机不需要密码.
我有sudo设置与该用户,以便我可以以root身份运行所需的命令,没有密码.
我只使用ssh执行远程命令几天(这是一个光荣的发现!).
一点背景:
在远程主机上运行的脚本是程序的典型启动/停止脚本.在实际程序的某处,打开一个日志文件进行写入.
在远程主机上,如果我以root身份运行脚本,一切都很顺利.
如果我以用户身份运行它,我会收到错误:log4cplus:ERROR无法打开文件:appname.log.有道理,因为日志归root所有.
现在,情况:
我的本地主机上有一个脚本,它将ssh到远程主机,使用sudo将运行该脚本.该脚本能够运行.但是,在它启动后,我得到与上面有关日志文件的相同错误.
我已经尝试了以下,所有都成功运行脚本,但得到错误.我知道有些是没有必要的,但是我想覆盖我能找到的所有基础(我也试过-t,但没有区别.我不认为会有,但是……):
/usr/bin/ssh username@remotehost sh -c sudo "/etc/rc3.d/S99script start" /usr/bin/ssh username@remotehost sh -c sudo "/etc/rc3.d/S99script start" /usr/bin/ssh username@remotehost 'sh -c sudo "/etc/rc3.d/S99script start"' /usr/bin/ssh username@remotehost sudo /etc/rc3.d/S99script start /usr/bin/ssh username@remotehost "sudo /etc/rc3.d/S99script start" /usr/bin/ssh username@remotehost sudo "/etc/rc3.d/S99script start" /usr/bin/ssh username@remotehost 'sudo "/etc/rc3.d/S99script start"' /usr/bin/ssh username@remotehost sudo su - -c "/etc/rc3.d/S99script start" /usr/bin/ssh username@remotehost 'sudo su - -c "/etc/rc3.d/S99script start"'
我知道我还尝试过其他的东西,但我没有记录下来.
不要嘲笑我尝试所有不同的引号,我对一般情况下使用时有一个很好的理解,但我没有尝试不同的东西:)
运行这些时我注意到的是,如果我为脚本名称执行了ps -ef | grep,它会显示以下内容:
[username's UID] 3070 3069 0 14:42 ? 00:00:00 bash -c /etc/rc3.d/S99script start
那甚至是我做“sh -c sudo”的那些.
它作为bash -c运行的事实很有趣,但也有趣(我想?)是它有用户的UID而不是列出的用户名.
**添加:我还尝试在“用户名”的主目录中创建一个脚本:
sudo /etc/rc3.d/S99script start
我得到了相同的结果.
解决方法
其次,看看sshd_config(5)中的ForceCommand – 如果你正在使用一个只能做一件事的服务帐户,这会提供额外的安全性.请注意Match指令的引用.
最后,当执行同时涉及系统上文件修改的命令时,sudo会产生意想不到的结果 – 这就是为什么“sudo echo foobar>> / etc / passwd”这样的东西不会像你认为的那样工作.这很可能(虽然我不能确定没有看到有问题的实际脚本)是你当前情况的一个因素.按照我上面的第一个建议,你将完全绕过这个问题. 原文链接:https://www.f2er.com/linux/395359.html