在Linux和Unix上 sudo:Sorry, you must have a tty to run sudo报错
时间:2020-01-09 10:42:09 来源:igfitidea点击:
我试图运行以下命令:ssh [email protected] sudo command1/path/to/file但是,显示错误如下:
sudo: sorry, you must have a tty to run sudo
sudo:对不起,您必须有一个tty才能运行sudo
或者
sudo: no tty present and no askpass program specified
sudo:不存在tty且未指定askpass程序
如何在基于Linux或者Unix的系统上解决此问题? 在Fedora,RHEL,CentOS,许多其他Linux发行版和类Unix系统中,出于安全方面的考虑,此操作将以明文形式显示密码。
Linux或者Unix bash shell的修复程序是什么?
您必须按以下方式运行ssh命令,以避免显示为sudo的错误:对不起,您必须具有tty才能运行sudo Error:
ssh -t hostname sudo command ssh -t user@hostname sudo command ssh -t [email protected] sudo command1 /path/to/file
-t选项强制伪伪分配。
这可用于在远程机器上执行任意基于屏幕的程序,这在例如实现菜单服务时非常有用。
即使ssh没有本地tty,多个-t选项也会强制tty分配。
sudoers文件中的requiretty
选项
如果在sudo配置文件sudoers中设置requiretty
,则sudo仅在用户登录到实际tty时运行。
设置此标志后,只能从登录会话运行sudo,而不能通过cron,shell/perl/python或者cgi-bin脚本等其他方式运行。
默认情况下,此标记在许多商店中设置。
编辑/etc/sudoers
文件,执行:
# visudo
查找如下所示的行:
Defaults requiretty
将该行注释掉或者删除该行:
#Defaults requiretty
保存并关闭文件。
如何在不使用-t选项的情况下运行命令?
您可以使用su命令而不是sudo命令,如下所示:
## NOTE: RHEL/CentOS specific syntax ## su --session-command="/path/to/command1 arg1 arg2" ## others ## su -c '/path/to/command1 arg1 arg2'
或者
ssh [email protected] su --session-command="/path/to/command1 arg1 arg2" OR ssh [email protected] su -c '/path/to/command1 arg1 arg2'
您可以使用相同的语法以Hyman用户身份运行/scripts/job5143:
ssh [email protected] su --session-command="/scripts/job1 /nas" Hyman OR ssh [email protected] su Hyman -c "/scripts/job1 /nas"
另一种选择是使用以下语法(请参见下面的注释):
echo -e "\n"|sudo -S command