【问题标题】:Error "sudo: no tty present and no askpass program specified" while using with sshpass与 sshpass 一起使用时出现错误“sudo:不存在 tty 且未指定 askpass 程序”
【发布时间】:2018-01-16 06:00:38
【问题描述】:

我想编写一个脚本,我需要在不输入密码的情况下从不同的机器192.168.0.2 获取文件的内容,所以我使用sshpass 和以下命令:

sshpass -p "password" ssh -o StrictHostKeyChecking=no user@192.168.0.2 " ls /root/path/of/file"

输出:

ls: cannot access '/root/path/of/file': Permission denied

我明白了,因为我没有以 root 用户身份登录。所以我尝试了:

sshpass -p "password" ssh -o StrictHostKeyChecking=no user@192.168.0.2 "sudo ls /root/path/of/file"

输出:

sudo: no tty present and no askpass program specified

我该怎么办?

【问题讨论】:

    标签: shell sudo sshpass


    【解决方案1】:

    作为 StackExchange 上的 answer 的详细信息,远程主机上的 /etc/sudoers 文件可能不允许您在没有 tty 的情况下运行 sudo 命令。如果您无法解决问题,它还提供了许多解决问题的详细建议。

    【讨论】:

      【解决方案2】:

      试试ssh -t,它会为你分配一个tty。

      【讨论】:

      • 使用sshpass -p "password" ssh -t -o StrictHostKeyChecking=no user@192.168.0.2 " ls /root/path/of/file" 提示[sudo] password for user:。我希望自动添加密码。
      • 那么您需要 1) 配置 sudo 以实现无密码使用或 2) 使用 expect 等工具。