逃脱 SSH:

逃脱 SSH:

我有一个包含 950 个 MongoDB VM 的列表

我希望收集所有 mongodb.log。日志文件的路径取决于数据库名称。

for i in $(cat /tmp/mongonodes.txt) ; do sshpass -p34dDgdWger@rg4fll434ef scp root@$i:/data/*replicaset/*replicaset*/mongodb.log /tmp/$i-mongodb.log; done

上面的命令不起作用。root@$i:/data/*replicaset/*replicaset*/mongodb.log由于主机名可变,我无法单引号。

SSH 密钥不是一个选项。

答案1

逃脱 SSH:

  • 考虑通过 SSH 移动数据,*使用\or ""(引号)转义。您不需要转义变量,只需转义 scp host:"path\ *" 例如。您可能需要逃避它两次。

例如,使用\*

# On server (created a test log to replicate your scenario):
mkdir -p /data/TEST1replicasetTEST2/TEST3replicasetTEST4
touch /data/TEST1replicasetTEST2/TEST3replicasetTEST4/mongodb.log

# On client (I already have ssh keys, but sshpass will work all the same):
for i in $(cat /tmp/mongonodes.txt)
do 
    scp cmihai@$i:/data/\*replicaset\*/\*replicaset\*/mongodb.log \ 
       /tmp/$i-mongodb.log
done

结果:

mongodb.log                                   100%    0     0.0KB/s   00:00

$ ls /tmp/*mongo*
/tmp/192.168.136.148-mongodb.log  /tmp/mongonodes.txt

短期:

  • 设置SSH keys并将它们分发到您的服务器(例如:ssh 复制 ID

中期:

长期:

  • 查看集中式日志记录(例如系统日志
  • 分布式日志收集器,例如水槽

参考:

PS:不要在此处粘贴您的密码:-)。

相关内容