我需要一个cron作业来使用scp和kerberosvalidation跨服务器传输文件。 作业的系统用户在两台机器上的/ etc / passwd中,并且已经为Kerberosauthentication创build了一个有效的keytab(带有-randkey)。 cron作业脚本调用kinit,然后是scp,然后是kdestroy。 但是,除非将/ etc / passwd中的/ sbin / nologin更改为有效的shell(例如/ bin / bash),否则scp将无法工作。
问题1:这是一个安全漏洞来指定一个shell?
问题2:这是做到这一点的“正确”方法吗?
提前致谢
答案1:可能是。 如果你要禁用任何其他的authentication方法,并因此强制使用密钥,而你相信这个密钥是强大的,那么一个
回答2:没有有效的shell scp会传输任何文件之前删除会话,这是一个耻辱。 似乎scponly做你想要的( http://www.sublimation.org/scponly/wiki/index.php/Main_Page )。
问题#1通常不是问题,除非该用户是root用户。 您还可以使用其他图层来限制访问权限; iptables,tcpwrappers,.ssh / authorized_keys中的from=选项,以及pam_access等等。
而不是使用scp ,这是一个单独的程序,需要用shell中的选项来调用,你可以使用sftp 。 在服务器上,将服务帐户的shell设置为sftp-server:
# RHEL systems usermod -s /usr/libexec/openssh/sftp-server username # debian systems usermod -s /usr/lib/sftp-server username
然后以批处理模式(-bbatch file)调用sftp进行非交互式使用。