Как использовать команду su из команды ssh в сценарии оболочки unix

Мое требование - войти в удаленную машину и создать несколько папок для этого. Я планирую использовать имя пользователя и пароль в качестве входных данных от пользователя и попытаться автоматизировать сценарий оболочки.

1.) Я использовал следующий код, чтобы подключиться к машине по ssh и дать ожидаемый pwd для входа в эту машину.

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$

Здесь нет ни пароля, ни чего-либо подобного.

Из вышесказанного не работает

Не могли бы вы предложить, возможно ли что-нибудь сделать su после ssh с паролем в автоматическом скрипте. Любые предложения будут высоко оценены.

Спасибо!


person user1709952    schedule 07.10.2013    source источник


Ответы (1)


Я давно использовал команду expect, и она работала без проблем с командой su, даже если она была запущена из консоли ssh.

Вот несколько примеров, которые, возможно, вы найдете полезными.

Прежде всего скрипт 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"
person Gooseman    schedule 12.10.2013