【问题标题】:Different output of command over sshssh 命令的不同输出
【发布时间】:2017-05-18 14:59:48
【问题描述】:

我想使用 top 通过 ssh 转储特定进程的 cpu 使用情况,并且我希望显示完整的命令行。 当我 ssh 到服务器并在本地执行命令时,我看到以下内容:

remote-server$ top -c -b -n 1 |grep redis-server
 5137 redis-user   20   0 83.5g  23g  884 S 13.7 29.3  13388:28 ./bin/redis-server *:11000 

但是当我通过 ssh 执行相同的命令时,我看到以下内容:

local-desktop$ ssh news-cache1 "top -c -b -n 1 |grep redis-server"
 5137 redis-user   20   0 83.5g  23g  884 S 13.7 29.4  13388:55 ./bin/redis-server 

我不明白为什么当我通过 ssh 运行命令时,我没有得到完整的命令行(带有主机和端口参数 *:11000)。

谁能告诉我我做错了什么?

我的本​​地桌面是 OS X,El Capitan,而远程服务器是 centos 6。

【问题讨论】:

    标签: linux ssh


    【解决方案1】:

    在 ssh 中使用 -t 选项重新运行命令。

    local-desktop$ ssh -t news-cache1 "top -c -b -n 1 |grep redis-server"
    

    当您远程运行命令时,ssh 客户端会分配一个宽度有限的 tty 终端。分配的终端宽度不足以显示您感兴趣的整行。添加 -t 会强制进行伪终端分配。来自http://man.openbsd.org/ssh

    -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 allocation, even if ssh has no local tty.
    

    【讨论】:

    • "ssh客户端在远程运行命令时会分配一个宽度有限的tty终端" 实际上,在远程运行命令时,它根本不分配tty。
    • 感谢 kdeb。 ssh 开始工作后,我用 pssh 尝试了相同的命令,然后即使在分配终端 (-X -tt) 后它也失败了。似乎在 pssh 伪终端宽度不够的情况下,最终能够通过如下设置终端宽度使其工作:pssh -i -X -tt -H news-cache1 "stty columns 200;top -c -b -n 1 |grep redis-server"
    猜你喜欢
    • 2015-05-02
    • 2012-06-29
    • 2014-03-29
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2017-05-01
    相关资源
    最近更新 更多