sudo over ssh:不存在tty且未指定askpass程序


15

我一直收到此错误,并尝试了几种在线讨论的方法来解决此问题,但没有一种对我有用。我已经设置了SSH密钥,因此当我运行'ssh newton@host.com'它时,它会自动登录我,我也将该用户设置visudo'newton ALL=(ALL:ALL) ALL' ,然后我也尝试添加'newton ALL=NOPASSWD: /var/www/script.sh'

不幸的是,每次我ssh newton@host.com 'sudo /var/www/script.sh'从Cygwin 跑回来,我都会回来。我也尝试添加,-t -t但是随后提示我输入密码。

total size is 21209180  speedup is 314.69
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

这并非专门针对Cygwin;我看到ssh example.com sudo echo hello从一个Linux系统到另一个系统使用相同的问题。我已经相应地更新了您的标题。我也已标记您要迁移到Unix站点的问题。
基思·汤普森

Answers:


10

您需要有一个可运行的终端,sudo以便它可以提示您输入密码。如果将命令传递给ssh,则除非您通过,否则它将假定该命令不需要终端并且不会创建终端-t。请参阅SSH内部SSH失败,并显示“ stdin:not tty”,以获取更详细的说明。

如果即使使用都无法输入密码-t,则可能是Windows引起的。Windows控制台不能完全模拟Unix终端;它不能完全模拟UNIX终端。在这种情况下,Cygwin应用程序可能难以正确模拟终端(请注意,我不确定)。如果这是问题所在,请ssh在诸如Console2或Mintty(包含在Cygwin发行版中)之类的终端仿真器中运行-请参阅Windows 7中与Cygwin一起使用Shell的最佳方法

如果您期望SSH密码短语替换用于验证sudo的密码,那将不会发生。Sudo需要密码(除非您NOPASSWD在sudoers文件中添加标签)。请注意,即使在sudoers文件中设置了该选项,即使使用NOPASSWD,您仍然需要一个终端requiretty

如果您希望无密码登录到根帐户(从安全角度考虑,这通常不是一个好主意),请使用SSH来访问根帐户,最好是两步访问。见里面SSH SSH失败,“标准输入:是不是tty”(用root@host.comotheruser@computertwo.com)。


3

我们想为nodejs命令/二进制文件不启用任何密码。

修改visudo

sudo visudo

用下面的行来启用命令没有密码。Pass是多个命令,每个命令后都有逗号和空格。

<user name> ALL = NOPASSWD: /usr/local/bin/node

例如 sunthara ALL = NOPASSWD: /usr/local/bin/node

在此处输入图片说明


1

编辑ssh-server配置文件并在底部追加:

root# vim /etc/ssh/sshd_config

Match User newton
    PermitTTY yes

不起作用:service sshd restart=>/etc/ssh/sshd_config: line 91: Bad configuration option: User
kiltek

可能需要更改为Match User newton
ILMostro_7

1
不,这意味着您无法写入Usersshd文件,因为该配置选项不存在。(至少多数民众赞成在我的系统Ubuntu 16.04上的情况)
kiltek

在手册页中:“ Match引入了一个条件块。如果匹配行上的所有条件都满足,则以下各行上的关键字将覆盖配置文件的全局部分中设置的那些关键字,直到另一个匹配行或末尾为止Match的参数是一个或多个条件模式对,可用条件是User,Group,Host和Address。匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用通配符和否定ssh_config(5)的PATTERNS部分中描述的运算符。”
ILMostro_7 '17

我看不到Match您的答案有任何障碍...
kiltek

0

当我在/ etc / sudoers中犯了一个错误时,我遇到了这个错误。而不是像这样指定多个命令:

NOPASSWD= /bin/x, /bin/y

我另存为:

NOPASSWD= /bin/x /bin/y

即没有逗号。现在,当我尝试时,会收到“ 不存在”消息

ssh host 'sudo x'

0

不知道它是否相关,但是当我在sudoers文件中有'... NOPASSWD:/xyz/script.shl'时,我得到了该错误消息,直到#!/bin/shellname/xyz/script.shl文件顶部添加了该行。


0

在/ etc / sudoers文件中注释以下参数对我有帮助。

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults   !visiblepw

--->注释掉参数如下

#Defaults    requiretty
#Defaults   !visiblepw
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.