迎接所有。
我需要一个“基础202”的问题回答; 有一阵子了。
从cronjob,我如何自动ssh到远程框检索信息,通常需要根等价看?
细节:
我所有的盒子都有
根login通过/etc/login.block禁用。
在/ etc / ssh / sshd_config中阻止通过ssh进行rootlogin:PermitRootLogin no
所有的sshlogin都是通过pub / priv keypair。 手动密码被禁用。 PasswordAuthentication no
我已经设置了一个有限的uid“自动化”,用于自动化ssh连接任务的密钥对(例如用于cron作业)。 '自动化'显然不是一个sudoer或轮子或组0 userid。
一切顺利和好(可能不完整,但这是另一个职位)。
但…
有些东西显然需要根对等才能做,比如'netstat -patn'来查看所有的TCP连接。
$ netstat -patn (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (servers and established)
要么
('apt-mirror'是远程框的主机名)
$ ssh apt-mirror netstat -patn (No info could be read for "-p": geteuid()=1008 but you should be root.) Active Internet connections (servers and established)
如果你在一个交互式会话中,那么查看你input的所有TCP连接:
$ sudo netstat -patn
但我不认为这可以通过自动ssh会话来完成。
$ ssh -t apt-mirror sudo netstat -patn [sudo] password for automate: <hangs here>
有几个原因:
我可以用微软的东西来做这件事,但是我真的很乐意去做。 (ssh甚至是这种types的活动的正确方法?)问题是,做这样的事情的正确方法是什么?
谢谢!
在远程服务器上编辑/ etc / sudoers(使用visudo ),让你的自动化用户专门运行这些sudo命令,而不用提示input密码。
没有root权限,你不能做“需要root权限的东西”。
从您提供的示例中,您正在进行某种监视,而不是执行操作( service httpd status vs service httpd restart )
考虑到你的环境受到根限制的限制,我会亲自使用像Nagios NRPE这样的东西来获得你需要的信息。 NRPE旨在提供信息,而不提供任何潜在的互动会话。 您可以定义允许远程主机执行的自己的命令,并限制允许哪个远程主机。
在你的例子中,你可以添加如下内容:
command[all_net_conns]=/usr/bin/sudo /bin/netstat -patn
您需要为Nagios / NRPE用户提供相应的无密码sudo访问权限,但是您可以将其限制为所需的命令,并locking该帐户,以便没有人可以真正访问它。
缺点当然是没有用户名/密码/密钥对等身份validation或访问授权,主机可以或不能访问NRPE服务获取信息。