求一个shell脚本,超强需求!!

时间:2022-10-03 21:53:48
脚本需求,切换用户到root,需要密码,然后以root用户来执行一条scp命令,命令中目标文件是远程文件,需要密码,以供最后的java程序调用,因为需要传几个参数给脚本

13 个解决方案

#1


直接建立信任关系,scp不输密码,然后scp写入脚本就行了
配置scp不输入密码:http://blog.163.com/fancy_duan/blog/static/97006820119961024749/

#2


引用 1 楼 prohibit 的回复:
直接建立信任关系,scp不输密码,然后scp写入脚本就行了
配置scp不输入密码:http://blog.163.com/fancy_duan/blog/static/97006820119961024749/

能通过java代码进行建立信任关系吗?

#3


就是一个命令,在A上生成私钥和公钥,把公钥拷到B上,以后A通过ssh/scp等方式访问B就可以不输入密码了,相当于是环境配置吧;

是shell的一个命令完成的,难道你要用java来实现这个功能?

#4


http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

#5


引用 4 楼 Mr_Ringht 的回复:
http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错

#6


引用 5 楼 ykf33411 的回复:
Quote: 引用 4 楼 Mr_Ringht 的回复:

http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错
我去...你们的环境管理员不装吗?我们这里无论是linux还是unix都有那个插件的...你要不试试看是不是你路径没指过去?按说linux环境安装的时候管理员都会安装tcl包的吧///

#7


引用 5 楼 ykf33411 的回复:
我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错

Linux系统一般会默认安装expect,但是Solaris、HP-UX、AIX等一般没有安装。

#8


尝试写了一个shell脚本

MYNAME=`whoami`

if [ "-${MYNAME}" != "-"root ]; then
   echo  "i am not root!"
    {

        sleep 1
        echo  "$6"
        sleep 2
        echo "scp $1 $2@$3:/home"
        sleep 2
        echo  "$4"
        sleep 2
        echo "exit"
    } | su "$5"


else
     echo  "i am  root!"
{
    {

        sleep 2
        echo "scp $1 $2@$3:/home"
        sleep 2
        echo  "$4"
        sleep 2
        echo "exit"
    } | su "$5"
}
fi

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

#9


引用 8 楼 ykf33411 的回复:
但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

#10


建议配置信任关系.

#11


引用 9 楼 ljc007 的回复:
Quote: 引用 8 楼 ykf33411 的回复:

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

啊,管道不可以实现输入密码功能?

#12


引用 9 楼 ljc007 的回复:
Quote: 引用 8 楼 ykf33411 的回复:

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

因为当前环境是按照操作手册搭建的,而且关联的远程机器IP是变换的 从文件中获取的

#13



#!/bin/sh
#!/usr/bin/expect
exp()
{
expect <<EOF
spawn scp $1 $2@$3:/home

expect {
"*assword:" {
send "$4\n";exp_continue
}
eof{
exit
}
}
EOF
}


if [ "-${MYNAME}" != "-"root ]; then
   echo  "i am not root!"
    {

        sleep 1
        echo  "$6"
        sleep 2
        exp $1 $2 $3 $4
        echo "exit"
    } | su "$5"


else
     echo  "i am  root!"

    {
        sleep 2
        exp $1 $2 $3 $4
        echo "exit"
    } | su "$5"

fi


当前脚本这样写,虽然实现最终功能,但是在java调试调用的时候,发现输出这些错误信息

Password: bash: line 1: spawn: command not found
bash: line 2: Password:: command not found
bash: line 3: 
201210241443P_mc_F1_S3_LA.zip: command not found

#1


直接建立信任关系,scp不输密码,然后scp写入脚本就行了
配置scp不输入密码:http://blog.163.com/fancy_duan/blog/static/97006820119961024749/

#2


引用 1 楼 prohibit 的回复:
直接建立信任关系,scp不输密码,然后scp写入脚本就行了
配置scp不输入密码:http://blog.163.com/fancy_duan/blog/static/97006820119961024749/

能通过java代码进行建立信任关系吗?

#3


就是一个命令,在A上生成私钥和公钥,把公钥拷到B上,以后A通过ssh/scp等方式访问B就可以不输入密码了,相当于是环境配置吧;

是shell的一个命令完成的,难道你要用java来实现这个功能?

#4


http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

#5


引用 4 楼 Mr_Ringht 的回复:
http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错

#6


引用 5 楼 ykf33411 的回复:
Quote: 引用 4 楼 Mr_Ringht 的回复:

http://blog.csdn.net/mr_ringht/article/details/8800926

你可以看下,利用expect实现交互式脚本,话说我也经常这么做....至于具体配置root密码等等,你可以修改程序加上配置文本就可以实现.

我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错
我去...你们的环境管理员不装吗?我们这里无论是linux还是unix都有那个插件的...你要不试试看是不是你路径没指过去?按说linux环境安装的时候管理员都会安装tcl包的吧///

#7


引用 5 楼 ykf33411 的回复:
我尝试了写一个expect脚本,但在执行时报 相应的 expect 命令不存在,应该是需要安装expect插件吧,但这对环境依赖太强了,如果没装插件,岂不是就会报错

Linux系统一般会默认安装expect,但是Solaris、HP-UX、AIX等一般没有安装。

#8


尝试写了一个shell脚本

MYNAME=`whoami`

if [ "-${MYNAME}" != "-"root ]; then
   echo  "i am not root!"
    {

        sleep 1
        echo  "$6"
        sleep 2
        echo "scp $1 $2@$3:/home"
        sleep 2
        echo  "$4"
        sleep 2
        echo "exit"
    } | su "$5"


else
     echo  "i am  root!"
{
    {

        sleep 2
        echo "scp $1 $2@$3:/home"
        sleep 2
        echo  "$4"
        sleep 2
        echo "exit"
    } | su "$5"
}
fi

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

#9


引用 8 楼 ykf33411 的回复:
但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

#10


建议配置信任关系.

#11


引用 9 楼 ljc007 的回复:
Quote: 引用 8 楼 ykf33411 的回复:

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

啊,管道不可以实现输入密码功能?

#12


引用 9 楼 ljc007 的回复:
Quote: 引用 8 楼 ykf33411 的回复:

但是在执行的时候还是要手工输入密码,自动输入不是用echo这个命令操作吗?

如果管道可以实现输入密码,大家就不会让你用expect了。

因为当前环境是按照操作手册搭建的,而且关联的远程机器IP是变换的 从文件中获取的

#13



#!/bin/sh
#!/usr/bin/expect
exp()
{
expect <<EOF
spawn scp $1 $2@$3:/home

expect {
"*assword:" {
send "$4\n";exp_continue
}
eof{
exit
}
}
EOF
}


if [ "-${MYNAME}" != "-"root ]; then
   echo  "i am not root!"
    {

        sleep 1
        echo  "$6"
        sleep 2
        exp $1 $2 $3 $4
        echo "exit"
    } | su "$5"


else
     echo  "i am  root!"

    {
        sleep 2
        exp $1 $2 $3 $4
        echo "exit"
    } | su "$5"

fi


当前脚本这样写,虽然实现最终功能,但是在java调试调用的时候,发现输出这些错误信息

Password: bash: line 1: spawn: command not found
bash: line 2: Password:: command not found
bash: line 3: 
201210241443P_mc_F1_S3_LA.zip: command not found