Linux 如何从perl脚本中注销ssh会话?
我有一个perl脚本,用于在打开ssh外壳后执行第二层身份验证。它要求输入密码,在n次无效尝试后,脚本应该注销用户。这在Debian系统上运行 现在的问题是,ssh shell通常是通过命令Linux 如何从perl脚本中注销ssh会话?,linux,perl,ssh,debian,Linux,Perl,Ssh,Debian,我有一个perl脚本,用于在打开ssh外壳后执行第二层身份验证。它要求输入密码,在n次无效尝试后,脚本应该注销用户。这在Debian系统上运行 现在的问题是,ssh shell通常是通过命令exit交互关闭的 当从backticks运行时,或者从perl脚本中的system()运行时,exit不会被识别为有效命令。那么,如何从ssh会话中,从perl脚本中注销用户呢?该脚本不负责ssh会话。它在远程上运行,并从.bashrc启动 这是代码的相关部分: while ($actualpass ne
exit
交互关闭的
当从backticks运行时,或者从perl脚本中的system()运行时,exit
不会被识别为有效命令。那么,如何从ssh会话中,从perl脚本中注销用户呢?该脚本不负责ssh会话。它在远程上运行,并从.bashrc启动
这是代码的相关部分:
while ($actualpass ne $password) {
++$attempts;
if ( $attempts > $maxattempts ) {
`/bin/bash /root/ascii_breach`;
`/bin/bash exit`;
}
/bin/bash退出
显然不起作用。听起来你有点倒退了。我认为您正在做的是ssh到运行shell的远程主机,shell运行perl,然后perl想要退出shell。更好的方法是通过ssh连接到主机直接运行perl脚本。只有通过了身份验证,perl脚本才会启动shell
您可以将sshd配置为在authorized_keys文件中运行您的身份验证脚本,假设用户是这样进入的。您可以启动身份验证脚本,检查退出状态,并在失败时注销shell:
perl auth.pl; if [ $? -ne 0 ]; then exit; fi
然后在Perl脚本中:
if ( $attempts > $maxattempts ) {
die 'Authentication failed';
}
您还需要使用ctrl+c或ctrl+z停止用户跳过身份验证:
trap "echo no" SIGINT SIGTSTP
perl auth.pl; if [ $? -ne 0 ]; then exit; fi
这应该是双重身份验证。sshd运行pam身份验证。用户认为他可以进入,但perl脚本已经启动。如果该层失败,用户需要再次通过pam进入。确定。我的评论站得住脚-您的身份验证过程应该在成功时启动实际的shell,而不是在失败时尝试退出启动它的shell。授权的\u密钥不只是存储可接受的公钥吗?它还可以为用户配置命令。这里有各种可能的解决方案-关键是在连接时,auth脚本是运行的,而不是shell。一个向父级(shell PID)发送信号的黑客(shell PID)
perl-e'kill HUP=>getppid()”
@mpapec,这太棒了。这正是我想要的,无需编辑系统文件。如果我没记错的话,在bash脚本中退出只会停止该程序。