sshfs не использует пароль в ожидаемом скрипте - PullRequest
3 голосов
/ 19 августа 2011

Я написал небольшой скрипт для предоставления пароля для sshfs, но по какой-то причине sshfs не получает пароль. Есть указатели? (PS Я знаю, что ssh-ключи лучше / безопаснее, но политика, в которой я работаю, не позволяет установить аутентификацию на основе ключей на целевом сервере - вздох ...).

#!/usr/bin/expect
# NOT WORKING!!
exp_internal 1
spawn sshfs server:/export/pc_storage /home/sonia/mnt/server
expect {
    "assword:" {
        send "secret\r\r"
        send_user "\n"
    }
    timeout {
        send_user "timed out!\n"
     }
}

Чтобы удалить пароль, я попытался \ r \ n \ r \ r - ничего не работает.

Отладка вывода, показывающая, что запрашивается пароль:

spawn sshfs server:/export/pc_storage /home/sonia/mnt/server
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {17532}

expect: does "" (spawn_id exp6) match glob pattern "assword:"? no
pcuser@server's password: 
expect: does "pcuser@server's password: " (spawn_id exp6) match glob pattern "assword:"? yes
expect: set expect_out(0,string) "assword:"
expect: set expect_out(spawn_id) "exp6"
expect: set expect_out(buffer) "pcuser@server's password:"
send: sending "secret\r\r" to { exp6 }

% uname -a
Linux zapote 2.6.38-10-generic-pae #46-Ubuntu SMP Tue Jun 28 16:54:49 UTC 2011 i686 i686 i386 GNU/Linux

% sshfs -V
SSHFS version 2.2
FUSE library version: 2.8.4
fusermount version: 2.8.4
using FUSE kernel interface version 7.12

РЕШИТЬ:

(я не могу опубликовать ответ, поскольку у меня нет 100 баллов - двойной вздох)

Мне нужно немного исправить это ... Например, я жестко закодировал PS1 в моем .bashrc в "bash_prompt" (по умолчанию я использую zsh).

#!/usr/bin/expect

# FIX: get homedir from env, set bash prompt somehow...

set timeout 30

spawn /bin/bash
expect "bash_prompt"
send_user "Shell spawned.\n"

send -- "sudo umount /home/sonia/mnt/server &> /dev/null\r"
expect "bash_prompt"

send -- "sshfs server:/export/pc_storage /home/sonia/mnt/server\r"
expect {
    "assword:" {
        send "secret\r"
        send_user "\n"
    }
    timeout {
        send_user "timed out!\n"
    }
}
expect "bash_prompt"

Ответы [ 3 ]

5 голосов
/ 07 декабря 2013

Вместо того, чтобы использовать Expect, вы можете просто указать пароль напрямую. Попробуйте это:

echo your-password | sshfs server:/export/pc_storage /home/sonia/mnt/server -o password_stdin

Не уверен, что вы можете сделать это с помощью политик паролей, но это стоит попробовать.

2 голосов
/ 07 декабря 2013

Мне нужно это немного исправить ... Например, я жестко закодировал PS1 в моем .bashrc в "bash_prompt" (по умолчанию я использую zsh).

#!/usr/bin/expect

# FIX: get homedir from env, set bash prompt somehow...

set timeout 30

spawn /bin/bash
expect "bash_prompt"
send_user "Shell spawned.\n"

send -- "sudo umount /home/sonia/mnt/server &> /dev/null\r"
expect "bash_prompt"

send -- "sshfs server:/export/pc_storage /home/sonia/mnt/server\r"
expect {
    "assword:" {
        send "secret\r"
        send_user "\n"
    }
    timeout {
        send_user "timed out!\n"
    }
}
expect "bash_prompt"
0 голосов
/ 19 августа 2011

\r\r не кажется правильным.Вы пробовали \r\n?

...