0

我正在尝试自动化登录防火墙服务器、导出一些日志、将日志 scp 到本地主机然后将其从远程服务器(防火墙服务器)中删除的过程

我还启用了基于主机的身份验证,以便两台机器在 ssh-ing 和传输期间无需输入任何一台机器的密码即可进行通信。

我开始使用系统调用,认为它会起作用,但它似乎不像预期的那样起作用。我所做的是这样的

system(ssh user@firewallserver)
system(cd /directory)
system(fwm logexport)
system(scp log user@localhost:/home)
system(rm log)

过去尝试过这个的人会知道这不起作用,但我不知道解决方案或完成任务的不同方式。

谢谢!

4

3 回答 3

2

每个system命令都会打开新进程,以便您的 ssh 会话在第二次调用中消失。如果您真的想使用,请尝试在一个命令中执行system

ssh server <some commands on server side>

scp <path on server> <local path>

编辑:试试

ssh server 'cd /directory && touch test123'

在命令行上。这应该test123在目录中的远程服务器上创建文件/directory。然后将此命令放入您的system(...)通话中。通过这种方式,您可以在远程主机上执行命令。对于每个新system呼叫,您都必须再次ssh server <commands>...

如果您在 C 程序中不需要它,您可以将这些命令直接放在 bash 脚本中:

#!/bin/bash
ssh server 'cd /directory && touch test123'
scp server:/directory/test123 /home/me/log123
于 2013-05-14T21:23:02.313 回答
0

Bash绝对是要走的路!您可以将这些命令直接粘贴到脚本中,如果您正确设置了身份验证,它应该可以工作。

脚本看起来像这样:

#!/bin/bash
ssh user@firewallserver
cd /directory
fwm logexport
scp log user@localhost:/home #Possible mistake
rm log

现在我查看了您的代码,可能存在误解。我认为你应该log搬回你原来的ssh机器firewallserver

如果是这种情况,您不能localhostscp通话中使用,因为那是firewallserver. 您需要scp log user@<your local IP>将日志返回到您登录的机器。

也许我误解了,如果是这样的话,那么我上面发布的脚本应该可以工作。但是,如果我是正确的,那么只需交换scp线路就可以了。

于 2013-05-14T22:32:50.920 回答
0

这就是如何有效地做到这一点,在 bash 脚本中执行以下操作

#!/bin/bash
ssh user@host 'bash -l' < ~/dowork.sh

“dowork.sh”脚本是您要在远程计算机上执行的脚本,您必须将它们分成两个脚本并在执行命令时将 dowork.sh 重定向到 ssh

要验证您是否将 shell 放入正确的机器中,请在“dowork.sh”中执行此操作

#!/bin/bash
echo $PATH

这将为您提供远程机器的路径变量。

于 2013-06-21T14:51:53.300 回答