抑制'警告:无法访问tty'在ssh

时间:2013-09-17 17:17:29

标签: linux ssh tcsh tty

我有一个简短的简单脚本,它编译.c文件并在运行tcsh的远程服务器上运行它然后只是将控制权交给我的机器(这是为了学校,我需要我的程序在实验室计算机上正常工作,但想在我的机器上编辑它们等。它以这种方式运行命令:

ssh -T user@server << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF

到目前为止它工作正常,但每次我这样做都会发出警告:

Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.

我知道这在技术上不是问题,但它太过烦人了。我正在尝试做学校工作,检查我的程序输出等等,这会弄乱一切,我讨厌它。

我在我的机器上运行这个版本的ssh:

OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012

服务器上的此版本的tcsh:

tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux)

这个版本的服务器上的ssh:

OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

3 个答案:

答案 0 :(得分:1)

在OS X上,我用ssh -t -t解决了类似的问题(对于Vagrant上的脚本配置)(注意-t来了两次)。 基于ssh BSD手册页的建议:

  

-T禁用伪终端分配。

     

-t强制伪终端分配。这可以用于在远程机器上执行任意基于屏幕的程序,这可以   非常有用,例如实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。

答案 1 :(得分:1)

该消息实际上是由shell(在本例中为tcsh)打印的。 您可以使用

<input
    formControlName="idAnswerRadio"
    class="form-check-input cursor-pointer radio-button"
    type="radio"
    (click)="manageAnswer(n)">

<!-- Other inputs... -->

<input [disabled]="getDisabled()">

确保它属于strings /usr/bin/tcsh | grep 'no access to tty' 本身。

它与ssh的关系非常松散,即tcsh只是触发器,而不是原因。

您应该更改方法,而不要使用ssh。而是将可执行文件custom_script放入HERE DOCUMENT并通过ssh运行它。

/path/custom_script

或者,只需将复杂的命令作为单行运行即可。

# this will work
ssh user@dest '/path/custom_script'

答案 2 :(得分:0)

如果运行 tcsh 对您来说并不重要,请指定一个不同的 shell,它会起作用:

ssh -T user@server bash << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF