【问题标题】:Cron with command requiring sudo带有需要 sudo 的命令的 Cron
【发布时间】:2017-10-23 14:22:07
【问题描述】:

在我需要输入 sudo 密码的命令中创建脚本的选项是什么?
我正在导出 fsimage 并希望定期执行此操作。它可以从我的帐户中运行,但理想情况下,我想创建一个专门用于进行这些导出的用户。
我想远离使用 root cron 并使用更安全的方式来做这件事

整个命令如下所示:

sudo ssh czmorchr 'hdfs oiv -p Delimited -i $(ls -t /dfs/nn/current/fsimage_* | grep -v md5 | 
head -1) -o /dev/stdout 2>/dev/null' | grep -v "/.Trash/" |sed -e 's/\r/\\r/g' | awk 'BEGIN 
{ FS="\t"; OFS="\t" } $0 ! ~ /_impala_insert_staging/ && ($0 ~ /^\/user\/hive\/warehouse\/cz_prd/ || 
$0 ~ /^\/user\/hive\/warehouse\/cz_tst/) { split($1,a,"/"); db=a[5]; table=a[6]; gsub(".db$", "", table); } 
db && $10 ~ /^d/ {par=""; for(i=7;i<=length(a);i++) pa r=par"/"a[i] } db && $10 !~ /^d/ 
{ par=""; for(i=7;i<=length(a) - 1;i++) par=par"/"a[i]; file=a[length(a)] } NR > 1 { print db,table, par, file, $0 }' |
 hadoop fs -put -f - /user/hive/warehouse/cz_prd_mon_ma.db/hive_warehouse_files/fsim age.tsv

【问题讨论】:

  • 为什么要使用 sudo 来使用 ssh ?默认情况下,您可以作为简单用户使用 ssh
  • 如果您想运行无密码 sudo,您认为这比将其放在根 cron 中更安全吗?

标签: bash cron root sudo


【解决方案1】:

在不输入密码的情况下用sudo做某事,有一种不安全的方式,比如

echo ubuntu | sudo -S ls

这里我用 ubuntu 用户和 ubuntu 密码授予 ls 命令。 如您所见,将密码传递给 sudo -S 有效。

另外你需要让用户 sudoer 这是一个例子https://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line

【讨论】:

  • 为什么要使用 sudo ssh 到某个地方?
  • 如果他需要,他需要改变一些东西,不过,我给出了一个解决方案。那里的操作比 ssh 还多。他正在使用文件,我同意 sudo 不是一个干净的选项,我会寻找拒绝我权限的原因。
【解决方案2】:

我能够使用 setfacl 命令解决此问题。 (上下文:)我在 HDFS 中设置了另一个文件夹,备用节点应该转储其 fsimages。然后我使用了这个命令,之后,我能够在没有 sudo 和 crontab 的情况下运行上面的脚本。

setfacl -m u:hdfs:rwx /home/user_name/fsimage-dump/namenode

【讨论】: