bash – 尝试使用pam_exec编写rsync脚本
我正在尝试编写一个bash脚本,它将在pam_exec调用时执行rsync.我尝试了几种不同的方法,我不确定我做错了什么.
当我尝试通过添加登录时运行脚本 session optional pam_exec.so /usr/bin/local/sync.sh 到我的sshd文件,它给我一个12的退出代码. 如果我登录然后手动运行我的脚本,它允许我连接到远程服务器,它列出我的文件,但它实际上并没有同步任何东西. 我使用buth $USER和$PAM_USER尝试了下面的代码. $PAM_USER根本不起作用. #!/bin/sh rsync -azv -e ssh $USER@remote_server:/home/html/$USER/ /home/html/$USER
pam_exec的手册页说明该模块提供$PAM_USER,而不是$USER:
在我的基于Debian的系统上,我在pam_motd的条目之前添加了这一行 # Run a script on login session optional pam_exec.so /usr/local/etc/pam_exec.sh 然后我创建了测试脚本,记住要使其可执行: cat >/usr/local/etc/pam_exec.sh <<'EOF'; chmod a+rx /usr/local/etc/pam_exec.sh #!/bin/bash # test open_session = "$PAM_TYPE" && { echo date echo "PAM_USER=$PAM_USER,USER=$USER." } >>/tmp/pam_exec.log exit 0 EOF 最后,我打开了一个新的登录会话到我的测试系统,并在会话开始时看到我在我的日志文件/tmp/pam_exec.log中收到了这样的信息: Mon Nov 9 23:32:52 GMT 2015 PAM_USER=roaima,USER=. 要实现您的要求,您需要使用这样的脚本: #!/bin/sh rsync -azq -e ssh "$PAM_USER"@remote_server:/home/html/"$PAM_USER"/ /home/html/"$PAM_USER" >/dev/null 2>&1 请注意,rsync的所有输出都将被丢弃.这对于确保使用ssh作为传输的客户端/服务器应用程序在开始协商之前不会受到意外输出的影响是必要的.如果你真的想把它呈现给用户,我建议你把它写到用户特定的日志文件,如“$HOME / .pam_exec.log”,然后在用户的.profile中使用这样的一行来输出它登录过程完成后: if test -t 1 -a -s "$HOME/.pam_exec.log" then echo "Prelogin results" sed 's/^/| /' "$HOME/.pam_exec.log" fi 它不能免受竞争条件的影响,但IME大多数用户不会多次同时登录同一台服务器.如果您发现这种情况很常见,有办法解决它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |