我正在尝试自动执行登录防火墙服务器的过程,导出一些日志,将日志scp到本地主机,然后将其从远程服务器(防火墙服务器)中删除
我还启用了基于主机的身份验证,这样两台计算机就可以进行通信,而无需在ssh-ing和转移过程中输入任何一台计算机的密码。
我开始使用系统调用认为它可以工作,但似乎它没有按预期工作。我做的是这样的事情
system(ssh user@firewallserver)
system(cd /directory)
system(fwm logexport)
system(scp log user@localhost:/home)
system(rm log)
过去尝试过此操作的人会知道这不起作用,但我不知道解决方案,也可能是完成任务的不同方法。
谢谢!
答案 0 :(得分: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
答案 1 :(得分:0)
Bash肯定是要走的路!您可以直接将这些命令粘贴到脚本中,如果您已正确设置身份验证,它应该可以正常工作。
脚本看起来像这样:
#!/bin/bash
ssh user@firewallserver
cd /directory
fwm logexport
scp log user@localhost:/home #Possible mistake
rm log
现在我查看了你的代码,可能会有一个误解。我认为您应该将log
移回ssh
- 来自firewallserver
的原始计算机。
如果是这种情况,则无法在localhost
来电中使用scp
,因为那是firewallserver
。您需要scp log user@<your local IP>
才能将日志恢复为您登录的计算机。
也许我误解了,如果是这样的话,我上面发布的剧本应该有效。但是,如果我是正确的,那么只需交换scp
行即可。
答案 2 :(得分:0)
这是如何有效地完成的,在bash脚本中执行以下操作
#!/bin/bash
ssh user@host 'bash -l' < ~/dowork.sh
“dowork.sh”脚本是您要在远程计算机上执行的脚本,您必须将这些脚本分解为两个脚本并在执行命令时将dowork.sh重定向到ssh
验证你有一个shell进入正确的机器在“dowork.sh”中执行此操作
#!/bin/bash
echo $PATH
这将为您提供远程计算机的路径变量。