LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 848|回复: 10

新人第一贴:登录后的脚本中调用passwd的密码回显问题,请各位帮助!

[复制链接]
发表于 2004-7-3 00:18:44 | 显示全部楼层 |阅读模式
我假设了一个ssh服务,为了让用户只能使用passwd和cvs两个命令,写了下面的脚本:

#!/bin/bash

if [ "$*" = "-c cvs server" ]; then
        cvs server --allow-root=/dev
        exit;
fi;

if [ "$*" = "-c passwd" ]; then
        passwd
        exit;
fi;

echo "CVS Only!";

并在/etc/passwd中将用户的默认shell设置为这个脚本。

现在的问题是:使用cvs时一切正常,可像下面那样使用passwd:

ssh someuser@domian passwd

执行功能没有问题,可是修改密码的时候输入的密码回显在屏幕上。这个问题怎么解决?

谢谢大家!
发表于 2004-7-3 00:41:26 | 显示全部楼层
stty -echo  #关闭回显
stty echo   #打开回显
stty的使用:
http://www.linuxsir.cn/bbs/showt ... &highlight=stty
除了用stty也可直接用ANSI序列来控制:
http://www.linuxsir.cn/bbs/showt ... 15&pagenumber=5 之<<隐藏回显的另一法>>
 楼主| 发表于 2004-7-3 00:44:14 | 显示全部楼层
在passwd前加了一行:stty -echo,不管用呀。
发表于 2004-7-3 01:12:22 | 显示全部楼层
在技巧区里有关于禁止回显的贴子,搜一下,看是否有帮助?
 楼主| 发表于 2004-7-3 01:20:38 | 显示全部楼层
谢谢!

搜索了禁止回显,找到一个帖子,用的方法是禁止输出的回显,不是输入的回显,对我的问题不起作用。

我在登录后直接运行上面的脚本就没有问题,可作为用户的登录shell就有问题。可能是其他的什么原因吗?
发表于 2004-7-3 01:41:40 | 显示全部楼层
技巧:把输入的密码变成*号的方法
http://www.linuxsir.cn/bbs/showthread.php?threadid=44985
这贴你看了吗?
 楼主| 发表于 2004-7-3 09:36:23 | 显示全部楼层
多谢KornLee,不过把输入的密码换成*不解决我的问题呀。

现在的问题是作为登录后的shell启动的脚本执行passwd就回显密码,而作为普通脚本执行passwd就正常。问题是运行passwd的环境的区别。

如果KornLee有时间,可以在你的系统上试试,就知道问题在哪里了。建立一个测试帐户,将他的shell指定为上面的脚本,然后执行ssh user@localhost passwd就可以看到效果。

多谢!
发表于 2004-7-4 19:52:09 | 显示全部楼层
我觉得是因为在执行passwd的tty不是一个可以作回显控制的标准tty,甚至就不是一个tty,只能作为一个输入输出流使用,因此没法隐藏密码。
发表于 2004-7-4 19:55:40 | 显示全部楼层
又试了一下,即使把用户的shell设置成bash, ssh 时直接执行 passwd命令仍然不会隐藏回显。不知算是谁的bug,ssh还是shell的。也许不算?因为ssh可以认为是保密的,显示在屏幕上也只是自己看到?不知道rsh执行一下passwd会怎么样。
发表于 2004-7-4 19:59:57 | 显示全部楼层
hehe,找到解决办法了。ssh -t user@host passwd 就不会回显了。
-t 参数的功能就是即使是执行命令,也给连接分配一个tty,这样就可以由passwd控制回显了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表