日期:2014-05-16  浏览次数:20635 次

Shell脚本修改求助
本帖最后由 magi1201 于 2013-11-28 11:24:29 编辑

HOSTNAME=$1
USER="hadoop1"
PWD="hadoop1"
FILEPATH=$2
FILENAME=$3
SLEEPCNT="5"
LOGFILE="`pwd`/logs/startHadoop.log`date +%m%d%y`"
i=1
while [ `expr $i` -lt 2 ]
do
    i=`expr $i + 1`
    (
        sleep $SLEEPCNT;
        echo $USER;
        sleep $SLEEPCNT;
        echo $PWD;
        sleep $SLEEPCNT;
        echo "cd "$FILEPATH;
        sleep $SLEEPCNT;
        echo "nohup ./"$FILENAME" &";
        sleep $SLEEPCNT
        exit
    ) | telnet $1
done

if [ $? -eq 0 ];
then
    echo "success"
    echo $?
    exit 0
else
    echo "success"
    exit 0
fi

其中 $1 为ip地址,$2  文件路径,$3 文件名

现在有两点疑问
1  
i=1
while [ `expr $i` -lt 2 ]
do
    i=`expr $i + 1`
 i=1 然后 
`expr $i` -lt 2
 执行while循环体,接着
i=`expr $i + 1`
 那while在此就失去了循环的意义,请问,大家是否同意此看法?
 ) | telnet $1
 此处的 |  在此是什么作用呢?

我的问题
我现在要将此telnet链接方式改为ssh 链接方式,是否直接在要连接机子间建立互信,然后直接 将telnet $1 改为 ssh $1就可以了呢
请大家帮忙解答,灰常感谢。
Linux Shell

------解决方案--------------------
引用:
因为要连接的服务器跟其他机子有密钥互信关系。


(1)关于密码有个原则(个人认为),一定不能写在明面上!
(2)一台服务器可以与多台服务器之间有密钥互信关系。所以不用你那样复杂的写一个脚本。你还是安装那个地址,不用关心其他,只操作你的主机和远程主机之间的密钥关系试一下。


------解决方案--------------------
引用
现在不能直接用密钥互信的方式,因为要连接的服务器跟其他机子有密钥互信关系。
现在想将密码写在文件里,在ssh连接时,直接读取文件,可以实现不呢?
现在想通过下面脚本去执行ssh连接,但是要从本地服务器读取密码文件

ssh和sftp这种security的连接方式都不支持在命令行里面指定密码或者从文件里面读取密码。
通常的两种方法:
1、建立密钥互信(不符合你的需求)
2、调