我想自动建立ssh连接并将数据包安装到连接的计算机上。我能够自动处理SSH连接。我什至可以运行不需要sudo授权的命令。但是我没有找到一种在需要sudo授权的命令中自动输入密码的方法。您如何看待我可以自动输入sudo密码?
/usr/bin/expect -c 'spawn ssh -t usr@ip bash "pwd; sudo apt-get update"; expect "password:"; send "12345\r"; interact;'
spawn ssh -t usr@ip bash pwd; sudo apt-get update
usr@ip's password:
/bin/pwd: /bin/pwd: cannot execute binary file
[sudo] password for usr:
答案 0 :(得分:3)
您需要-c
参数才能将命令字符串传递给Bash。另外,请尝试使模式与整行匹配。尝试:
/usr/bin/expect -c 'spawn ssh -t usr@ip bash -c "pwd; sudo apt-get update"; expect "*password:"; send "12345\r"; interact;'
^^ ^
请注意,对于此类任务,Ansible会非常有用,因为它将处理与SSH和SUDO相关的所有样板,并提供高级模块来轻松执行任何任务。
Ansible脚本(“剧本”)看起来像这样(未经测试):
- hosts: ip
tasks:
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
您可以将SUDO密码存储在一个文件中,并且该文件可以被加密。