sudo - sorry you must have a tty to run sudo 解决方法
什么是tty
TTY(TeleTYpe、Teletypes or teletypewriters)
原指电传打字机。Linux
或 UNIX
tty 是一个抽象设备,指的是一个子系统,它通过 TTY
驱动程序在内核级别实现进程管理、行编辑和会话管理等
- Linux 系统中,一般可以通过如下快捷键切换 TTY 窗口
Ctrl + Alt + F1
锁屏
Ctrl + Alt + F2
桌面环境
Ctrl + Alt + F3
TTY3
Ctrl + Alt + F4
TTY4
Ctrl + Alt + F5
TTY5
Ctrl + Alt + F6
TTY6
- Linux 中通过 tty 命令行与系统进行交互,通过
who
查看使用的 tty 号
F&Q
ssh: sorry you must have a tty to run sudo
刚刚配置了SUDOWS来执行SSH连接中没有密码的命令,报如上错
替换 /etc/sudoers
中 Defaults requiretty
by Defaults !requiretty
。该修改影响全局配置。
你也可以为单独用户、用户组或指定命令设置权限限制:
Defaults!/path/to/my/bin !requiretty
Defaults:myuser !requiretty
ssh 链接时,使用 -t
参数:
ssh -t root@10.10.10.10
From man ssh: text -t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
未测试:
export HASTTY=1
- 解决方式三:在
~/.ssh/config
中配置 RequestTTY force
Host <alias name>
Hostname <ip or domain>
User <user>
IdentityFile <ssh key file>
RequestTTY force
# RemoteCommand screen -dR screen_name
- 解决方式四:通过
script -q -c tty
分配一个 tty
$ docker run -it xxx
the input device is not a TTY
# 或出现在 ssh 时
$ ssh <user>@<ip> docker run -it xxx
- 解决方法:
-it
去掉 -t
参数,-t
指分配一个 伪终端tty