使用ssh从远程盒子自动检索信息

迎接所有。

我需要一个“基础202”的问题回答; 有一阵子了。

cronjob,我如何自动ssh到远程框检索信息,通常需要根等价看?

细节:

我所有的盒子都有

  1. 根login通过/etc/login.block禁用。

  2. 在/ etc / ssh / sshd_config中阻止通过ssh进行rootlogin:PermitRootLogin no

  3. 所有的sshlogin都是通过pub / priv keypair。 手动密码被禁用。 PasswordAuthentication no

  4. 我已经设置了一个有限的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> 

有几个原因:

  1. sudo交互式地想要“自动”密码
  2. “自动化”不是一个sudoer无论如何。

我可以用微软的东西来做这件事,但是我真的很乐意去做。 (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服务获取信息。