完全自动建立 ssh 连接并输入 sudo 密码
Make the ssh connection and enter the sudo password fully automatically
我想自动建立 ssh 连接并在连接的机器上安装一个数据包。我能够自动处理 SSH 连接。我什至可以 运行 不需要 sudo 授权的命令。但是我没有找到在需要sudo授权的命令中自动输入密码的方法。你觉得我怎么能自动输入sudo密码?
asd.sh
/usr/bin/expect -c 'spawn ssh -t usr@ip bash "pwd; sudo apt-get update"; expect "password:"; send "12345\r"; interact;'
asd.sh输出
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:
您需要 -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 脚本 ('playbook') 看起来像这样(未经测试):
- hosts: ip
tasks:
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
您可以将 SUDO 密码存储在一个文件中,该文件可以被加密。
我想自动建立 ssh 连接并在连接的机器上安装一个数据包。我能够自动处理 SSH 连接。我什至可以 运行 不需要 sudo 授权的命令。但是我没有找到在需要sudo授权的命令中自动输入密码的方法。你觉得我怎么能自动输入sudo密码?
asd.sh
/usr/bin/expect -c 'spawn ssh -t usr@ip bash "pwd; sudo apt-get update"; expect "password:"; send "12345\r"; interact;'
asd.sh输出
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:
您需要 -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 脚本 ('playbook') 看起来像这样(未经测试):
- hosts: ip
tasks:
- name: Update and upgrade apt packages
become: true
apt:
upgrade: yes
您可以将 SUDO 密码存储在一个文件中,该文件可以被加密。