Linux tty 介绍

发布时间: 更新时间: 总字数:498 阅读时间:1m 作者: IP上海 分享 网址

sudo - sorry you must have a tty to run sudo 解决方法

什么是tty

  • TTY(TeleTYpe、Teletypes or teletypewriters) 原指电传打字机。LinuxUNIX 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连接中没有密码的命令,报如上错

  • 解决方式一:修改 sudoers 配置

替换 /etc/sudoersDefaults requiretty by Defaults !requiretty。该修改影响全局配置。

你也可以为单独用户、用户组或指定命令设置权限限制:

Defaults!/path/to/my/bin !requiretty
Defaults:myuser !requiretty
  • 解决方式二:使用 ssh -t 访问

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 报错 the input device is not a TTY

$ docker run -it xxx
the input device is not a TTY

# 或出现在 ssh 时
$ ssh <user>@<ip> docker run -it xxx
  • 解决方法:-it 去掉 -t 参数,-t 指分配一个 伪终端tty
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数