使用rvm install安装Ruby时,使用脚本自动输入密码?

时间:2015-02-08 11:11:00

标签: linux bash shell

我想使用LOCAL脚本在服务器上远程安装ruby。以下是我的代码:

sshpass -p ****** ssh hx@$HOST 'bash -s' <<'ENDSSH'
    export PATH=$PATH:/home/hx/.rvm/bin/

    rvm install 2.2.0
ENDSSH

当我运行此脚本时,会出现错误:

Error running 'requirements_debian_update_system ruby-2.2.0',
showing last 15 lines of /home/hx/.rvm/log/1423392690_ruby-2.2.0/update_system.log
++ [[ -d /usr/sbin ]]
++ [[ :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/hx/.rvm/bin/:/home/hx/.rvm/bin: != *\:\/\u\s\r\/\s\b\i\n\:* ]]
++ for sbin_path in /sbin /usr/sbin /usr/local/sbin
++ [[ -d /usr/local/sbin ]]
++ [[ :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/hx/.rvm/bin/:/home/hx/.rvm/bin: != *\:\/\u\s\r\/\l\o\c\a\l\/\s\b\i\n\:* ]]
++ [[ -n '' ]]
++ command_to_run=(__rvm_sudo -p "%p password required for '$*': " "${command_to_run[@]}")
++ __rvm_sudo -p '%p password required for '\''apt-get --quiet --yes update'\'': ' apt-get --quiet --yes update
++ command sudo -p '%p password required for '\''apt-get --quiet --yes update'\'': ' apt-get --quiet --yes update
++ sudo -p '%p password required for '\''apt-get --quiet --yes update'\'': ' apt-get --quiet --yes update
sudo: no tty present and no askpass program specified
++ return 1
++ typeset __ret=1
++ case ${__ret} in
++ return 1
Requirements installation failed with status: 1.
make: *** [install-ruby] Error 1

事实证明,当以非root用户身份运行rvm install时,它会要求您输入密码以在此过程中更新apt-get。

有没有办法在我的脚本中自动输入密码?像

echo password | apt-get -S install xxxxxx

1 个答案:

答案 0 :(得分:0)

通常不会:向sudo发送密码不被视为安全。错误消息指向建议的解决方案:提供(配置)将提示您输入密码的程序。使用sudo,一旦您提供了有效的密码,它将保持有效几分钟(如果您在超时之前继续使用凭​​据,则会延长)。

对于配置等,此summary of askpass似乎有帮助。

以下是另一个摘要,例如:Graphically ask for password in a bash script and retain default sudo timeout setting。有趣的是它的“askpass”程序是一个调用kdialog的shell脚本。可以使用“对话框”开发类似的示例,甚至可以使用“读取-p”读取变量的bash脚本,甚至 - 简单地回显密码,如How to use sudo inside of a Run Script build phase in Xcode 4?

中所做的那样。