建立ssh连接并全自动输入sudo密码

Posted

技术标签:

【中文标题】建立ssh连接并全自动输入sudo密码【英文标题】:Make the ssh connection and enter the sudo password fully automatically 【发布时间】:2019-04-19 08:32:49 【问题描述】:

我想自动建立 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:

【问题讨论】:

“无法执行二进制文件”与您的问题无关。该命令运行良好,但由于外部原因失败。 我知道,我在输入 sudo 密码后得到了我想要的打印。但是我想用脚本自动输入sudo密码,结果可以直接在终端看到。 @tripleee 【参考方案1】:

您需要 -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连接并全自动输入sudo密码的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本添加 ssh-add 并自动输入密码

Shell脚本交互之:自动输入密码

谷歌云ssh开启root密码登录

Shell脚本自动输入密码的三种方式

用Python写个自动ssh登录远程服务器的小工具

ubuntu运行sh脚本sudo自动输入密码