Linux:ssh来托管和使用sudo来运行脚本,运行但脚本的一部分失败

前端之家收集整理的这篇文章主要介绍了Linux:ssh来托管和使用sudo来运行脚本,运行但脚本的一部分失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了高低,以获得答案.
我有密钥设置所以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
我得到了相同的结果.

解决方法

首先,更改基于密钥的身份验证,以便您登录到远程系统是有问题的用户 – 然后就不需要使用sudo(因为您已经表明服务没有以root身份运行,所以应该没有安全性关注基于自动密钥的登录).

其次,看看sshd_config(5)中的ForceCommand – 如果你正在使用一个只能做一件事的服务帐户,这会提供额外的安全性.请注意Match指令的引用.

最后,当执行同时涉及系统上文件修改的命令时,sudo会产生意想不到的结果 – 这就是为什么“sudo echo foobar>> / etc / passwd”这样的东西不会像你认为的那样工作.这很可能(虽然我不能确定没有看到有问题的实际脚本)是你当前情况的一个因素.按照我上面的第一个建议,你将完全绕过这个问题.

猜你在找的Linux相关文章