0

我的要求是登录到远程机器并为此创建一些文件夹我计划将用户名和密码作为用户的输入并尝试制作自动化的 shell 脚本。

1.)我使用以下代码 ssh 进入机器并提供预期的密码以登录到这台机器。

DSADMINPWD=dsadminpwd
PWD=pwd
/usr/bin/expect<<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no <username>@<remotemachineurl>
expect "password"
send "$PWD\n"
EOD

以上工作正常。但是在此之后执行 su dsadmin 。我无法从之前使用的密码进入该用户。

2.)我必须从这台机器内部更改像 su dsadmin 这样的用户。dsadmin 也有密码。但它不能正常工作。

    DSADMINPWD=dsadminpwd
    PWD=pwd
    /usr/bin/expect<<EOD
    spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no <username>@<remotemachineurl>
    expect "password"
    send "$PWD\n"
    EOD

    su dsadmin
    <like to make some folders in dsadmin directory>
    exit... 

完成 su dsadmin 后,它将作为

   bash-3.00$

这里没有密码或任何东西的迹象。

从上面它不起作用

您能否建议在自动脚本中使用密码进行 ssh 后是否有可能制作 su。任何建议将不胜感激。

谢谢!

4

1 回答 1

0

我很久以前使用过 expect 命令,即使它是从 ssh 控制台启动的,它也可以与 su 命令一起顺利运行。

这里有一些例子,也许你会觉得有用。

首先是 bash 脚本:

#!/bin/bash

exec 1> stdoutfile
exec 2> stderrfile

./yourexpectscript  YOUR_REMOTEIP_HERE userexample passwordexample

其次是期望脚本:

#!/usr/bin/expect --

send_user "connecting to remote server\n"

set server [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set dsadminpass "dsadminpwd"

spawn ssh $user@$server
expect "password: "
send "$pass\n"

expect {
    "> " { }
    "$ " { }
    "# " { }
}

#example command in ssh shell
send "ls -lah\n"

expect {
    "> " { }
    "$ " { }
    "# " { }
    default { }
}

#su command
send "su - dsadmin\n"

expect {
    "Password: " { }
}

send "$dsadminpass\n"

expect {
    "> " { }
    "$ " { }
    "# " { }
    default { }
}

#example command in dsadmin shell
send "ls -lah\n"

#login out dsdamin shell
send "exit\n"

expect {
    "> " { }
    "$ " { }
    "# " { }
    default { }
}

#login out ssh connection
send "exit\n"

send_user "connection to remote server finished\n"
于 2013-10-12T22:10:44.710 回答