V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alanhe421
V2EX  ›  SSH

关于 ssh 命令下 t 参数

  •  
  •   alanhe421 · 2022-05-01 11:00:23 +08:00 · 1842 次点击
    这是一个创建于 697 天前的主题,其中的信息可能已经有所发展或是发生改变。

    举例有如下命令

    
    ssh -p 22  -t [email protected] "tmux -CC attach || tmux -CC"
    
    

    这个 t 参数是什么含义,远程登录后执行的命令内容?试了下如果不写还不行,--help 查看命令手册,没看到有 t 这个参数

    https://i.imgur.com/A3WVOJx.jpg

    5 条回复    2022-05-03 09:39:08 +08:00
    ynyounuo
        1
    ynyounuo  
       2022-05-01 11:02:48 +08:00 via iPhone
    man
    ericls
        2
    ericls  
       2022-05-01 11:03:10 +08:00 via iPhone
    man ssh 里面有说明
    Xusually
        3
    Xusually  
       2022-05-01 11:05:29 +08:00 via iPhone
    man ssh

    -T Disable pseudo-terminal allocation.

    -t Force pseudo-terminal 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 alloca-tion, even if ssh has no local tty.

    另外,你仔细看看你发的图 Tt 不是都在?
    alanhe421
        4
    alanhe421  
    OP
       2022-05-01 15:11:35 +08:00
    @Xusually 你是说 这里这个吧[-46AaCfGgKkMNnqsTtVvXxYy]
    我意思下面的参数带详细描述的没有
    wgq2633
        5
    wgq2633  
       2022-05-03 09:39:08 +08:00
    lz 的疑点是不是主要在分配或者不分配伪终端的区别,什么是伪终端上面?
    这几个命令可以看到区别:

    a1. `ssh -t $host 'ls -l /proc/self/fd/'`
    lrwx------ 1 xxx xxx 64 May 3 09:30 0 -> /dev/pts/6
    lrwx------ 1 xxx xxx 64 May 3 09:30 1 -> /dev/pts/6
    lrwx------ 1 xxx xxx 64 May 3 09:30 2 -> /dev/pts/6
    a2. `ssh $host 'ls -l /proc/self/fd/'`
    lr-x------ 1 xxx xxx 64 May 3 09:31 0 -> pipe:[17376416]
    l-wx------ 1 xxx xxx 64 May 3 09:31 1 -> pipe:[17376417]
    l-wx------ 1 xxx xxx 64 May 3 09:31 2 -> pipe:[17376418]
    分配伪终端的时候,标入 /标出是 pts 伪终端设备; 不分配的时候,就是个管道

    b1. `ssh -t $host 'python -c "import os; print(os.get_terminal_size())"'`
    os.terminal_size(columns=197, lines=49)
    Connection to lo closed.
    b2. `ssh $host 'python -c "import os; print(os.get_terminal_size())"' `
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    OSError: [Errno 25] Inappropriate ioctl for device
    使用 python 的 `os.get_terminal_size` 函数获取终端尺寸
    分配终端的时候,标准输入 /输出的终端,有物理尺寸(上面例子是 49 行,197 列)也就是跟客户端的这个模拟终端的串口尺寸是物理相关的;
    不分配终端的话,标入 /标出就是一个普通的流数据,可以入 /可以出,但是 **没有尺寸**
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4034 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:18 · PVG 18:18 · LAX 03:18 · JFK 06:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.