sudo - sorry you must have a tty to run sudo 解决方法
什么是tty
- TTY(TeleTYpe、Teletypes or teletypewriters)原指电传打字机。- Linux或- UNIXtty 是一个抽象设备,指的是一个子系统,它通过- TTY驱动程序在内核级别实现进程管理、行编辑和会话管理等
- Linux 系统中,一般可以通过如下快捷键切换 TTY 窗口
- Ctrl + Alt + F1锁屏
- Ctrl + Alt + F2桌面环境
- Ctrl + Alt + F3TTY3
- Ctrl + Alt + F4TTY4
- Ctrl + Alt + F5TTY5
- Ctrl + Alt + F6TTY6
 
- 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