我正在用 Python 编写一个脚本,该脚本通过 ssh 连接到服务器,然后安装一些软件包。但是对话框有问题,我可以在对话框中输入 root 密码 - 我不知道如何在那里发送数据。一旦我尝试这样做,我的 apt(使用 Debian Lenny)就会崩溃。
这里有一些信息: - Debian Lenny - 使用界面更简单的 PySSH,代码如下所示:
clientSSH = SSHClient( self.ip, 'root', self.rootPassword, None )
clientSSH.login()
clientSSH.run_command('apt-get install mysql-server mysql-client php5')
clientSSH.run_command('Y')
#I Don't know how send root passwd here
clientSSH.logout()
答案1
使用apt-get -y
- 参见 apt-get(1)
如果你没有 SSH,请使用无密码的 SSH 密钥
答案2
我建议尝试:
apt-get -y install mysql-server mysql-client php5
开关-y
默认对所有问题都回答是。
就 MySQL 的根密码而言,Pexpect
如果您发现自己无法通过 PySSH 传输密码或无法可靠地确定何时发送密码,则可能必须使用类似的模块来发送密码。
更新答案:
我对此进行了一些研究,发现您有几个选择,而且对您来说都相当重要:
- 使用 Pexpect。
- 构建自定义 .deb,从“postinst”脚本中删除密码提示
- 使用 apt-get 和 dpkg 解压但不配置 MySQL。
选项 1:重写脚本以使用 Pexpect(这应该能够处理 ncurses)
选项 2:
# get the original .deb:
apt-get -y --download-only -q install mysql-server
# need a tempdir for this
mkdir ~/tmp;cd ~/tmp
cp /var/cache/apt/mysql-version.deb .
ar -x mysql-version.deb
mkdir DEBIAN
tar xf control.tar.gz -C DEBIAN
vim DEBIAN/postinst
# edit the lines about prompting for rootpw in here and replace $rootpw with what you want,
# or however you choose to accomplish this
tar xf data.tar.gz -C .
dpkg-deb -b . mysql-server-version-noprompt.deb
这就是你的新 .deb。我还没有测试过,所以 YMMV。
选项 3:
# Skip postinst entirely
apt-get -q -y --download-only mysql-server
dpkg --unpack /var/cache/apt/mysql-server-version.deb
# instead of dpkg you can use dpkg-deb:
dpkg-deb -X /var/cache/apt/mysql-server-version.deb /
这将完全跳过安装后步骤——查看脚本以了解其功能,然后重复这些步骤。