【发布时间】:2014-03-10 02:09:14
【问题描述】:
还有其他主题相同的主题,但我的问题是独一无二的。我正在运行一个 bash 脚本,该脚本具有连接到远程服务器并在远程服务器上运行 sudo 命令的功能。我正在使用 ssh -t 选项来避免 requiretty 问题。只要不是从 while 循环中调用,有问题的代码行就可以正常工作。 while 循环基本上是从本地服务器上的一个 csv 文件读取并调用 checkAuthType 函数:
while read inputline
do
ARRAY=(`echo $inputline | tr ',' ' '`)
HOSTNAME=${ARRAY[0]}
OS_TYPE=${ARRAY[1]}
checkAuthType $HOSTNAME $OS_TYPE
<more irrelevant code>
done < configfile.csv
这是位于脚本顶部的函数(在任何 while 循环之外):
function checkAuthType()
{
if [ $2 == linux ]; then
LINE=`ssh -t $1 'sudo grep "PasswordAuthentication" /etc/ssh/sshd_config | grep -v "yes\|Yes\|#"'`
fi
if [ $2 == unix ]; then
LINE=`ssh -n $1 'grep "PasswordAuthentication" /usr/local/etc/sshd_config | grep -v "yes\|Yes\|#"'`
fi
<more irrelevant code>
}
因此,违规行是函数中包含 sudo 命令的行。我可以将命令更改为“sudo ls -l”之类的简单命令,但仍然会收到“stdin 不是终端”错误。我也尝试过“ssh -t -t”但无济于事。但是,如果我从 while 循环之外调用 checkAuthType 函数,它就可以正常工作。改变终端的while循环是什么,我该如何修复它?提前一千次感谢您。
【问题讨论】:
标签: linux bash ssh scripting sudo