sudo:抱歉,您必须有一个 tty 才能运行 sudo Linux 和 Unix 上的错误
我正在尝试运行以下命令:
ssh user@box.example.com sudo command1 /path/to/file
但是,显示以下错误:
出于安全考虑,Fedora、RHEL、CentOS、许多其他 Linux 发行版和类 Unix 系统中都是这样做的,因为它将以明文格式显示密码。
-t 选项强制分配伪 tty。这可用于在远程计算机上执行任意基于屏幕的程序,这非常有用,例如,在实现菜单服务时。多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty。
ssh user@box.example.com sudo command1 /path/to/file
但是,显示以下错误:
sudo:抱歉,您必须有一个 tty 才能运行 sudo
或者
sudo:没有 tty 存在并且没有指定 askpass 程序
如何在基于 Linux 或 Unix 的系统上解决这个问题?
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 上的 ssh |
预计阅读时间 | 2 分钟 |
Linux 或 Unix bash shell 上的修复方法是什么?
您必须按如下方式运行 ssh 命令以避免出现读为sudo 的错误:抱歉,您必须有一个 tty 才能运行 sudo 错误:
ssh -t hostname sudo command ssh -t user@hostname sudo command ssh -t user@box.example.com sudo command1 /path/to/file
示例会话:
图 01:如果我可以通过 ssh 无需密码即可使用 sudo,则 Linux 和 Unix tty 将运行 sudo
requirettysudoers 文件中的选项
如果requiretty在 sudo 配置文件中设置了 sudoers,则 sudo 仅在用户登录到真实 tty 时运行。设置此标志后,sudo 只能从登录会话运行,而不能通过其他方式(如 cron、shell/perl/python 或 cgi-bin 脚本)运行。默认情况下,许多 disstore 上都设置了此标志。编辑/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 user@server1.example.in su --session-command="/path/to/command1 arg1 arg2" OR ssh user@server1.example.in su -c '/path/to/command1 arg1 arg2'
您可以使用相同的语法以 vivek 用户身份运行 /scripts/job5143:
ssh user@server1.example.in su --session-command="/scripts/job1 /nas" vivek OR ssh user@server1.example.in su vivek -c "/scripts/job1 /nas"
另一种选择是使用以下语法(参见下面的注释):
echo -e "\n"|sudo -S command
请参阅手册页以获取更多信息 –