Linux 抑制';警告:无法访问tty';宋承宪
我有一个简短的脚本,它编译了一个Linux 抑制';警告:无法访问tty';宋承宪,linux,ssh,tcsh,tty,Linux,Ssh,Tcsh,Tty,我有一个简短的脚本,它编译了一个.c文件,并在运行tcsh的远程服务器上运行它,然后将控制权返回给我的机器(这是学校用的,我需要我的程序在实验室计算机上正常工作,但想在我的机器上编辑它们等等)。它以这种方式运行命令: ssh -T user@server << EOF cd cs4400/$dest gcc -o $efile $file ./$efile EOF 我知道从技术上讲这不是问题,但它非常烦人。我正试着做功课,检查我的程序的输出等等,这把一切都搞得乱七八糟,我讨厌这样
.c
文件,并在运行tcsh
的远程服务器上运行它,然后将控制权返回给我的机器(这是学校用的,我需要我的程序在实验室计算机上正常工作,但想在我的机器上编辑它们等等)。它以这种方式运行命令:
ssh -T user@server << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF
我知道从技术上讲这不是问题,但它非常烦人。我正试着做功课,检查我的程序的输出等等,这把一切都搞得乱七八糟,我讨厌这样
我正在我的计算机上运行此版本的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)
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
服务器上此版本的ssh:
tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux)
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
在OSX上,我用
ssh-t-t
(注意-t
出现了两次)解决了类似的问题(对于Vagrant上的脚本配置)。
基于ssh BSD手册页的建议:
-T禁用伪终端分配
-t强制伪终端分配。这可用于在远程计算机上执行任意基于屏幕的程序,该程序可以
非常有用,例如在实施菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty
消息实际上是由shell打印的,在本例中为tcsh。 你可以用
strings /usr/bin/tcsh | grep 'no access to tty'
确保它属于tcsh
本身
它与ssh的关系非常松散,即ssh
,在本例中,它只是触发器,而不是原因
您应该改变方法,不要使用此处文档
。而是将可执行的自定义脚本放入/path/custom\u script
中,并通过ssh运行它
# this will work
ssh user@dest '/path/custom_script'
或者,只需将复杂命令作为一行程序运行即可
# this will work as well
ssh user@dest "cd cs4400/$dest;gcc -o $efile $file;./$efile"
如果运行
tcsh
对您来说并不重要,请指定一个不同的shell,它将工作:
ssh -T user@server bash << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF
ssh-Tuser@serverbash当-T
显式禁用tty分配时,我很确定您希望-T
显式启用tty分配并消除错误。啊,是的,我应该记得对此说些什么。在尝试解决另一个问题之前,我已经这样做了,下面是更改所带来的结果:伪终端将不会被分配,因为stdin不是终端。
这是在我之前的警告之外给出的。