我正在为我的一些用户设置以下内容。
- 机器 A,运行 OpenSSH_6.6.1p1、OpenSSL 1.0.1e-fips
- 机器 B,运行 OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8、OpenSSL 1.0.1f
- 两台服务器都是 Linux,我负责管理后者。
用户在两台机器上都有账户,他们手动从 B ssh 到 A,例如通过ssh A
在 A 上输入并执行操作。他们的~/.ssh/config
样子如下:
Host *
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%
在 B 上运行其他程序时,它们还会(间接地)运行命令,例如ssh -tt A xxx
(其中xxx
是一些复杂的东西),因为在 B 上执行任何操作时,它都需要找到一些需要以这种方式找到的东西。由于控制主控,它们不会一直被密码请求所困扰(机器 A 不受我的控制,不接受基于密钥的登录)。请注意,xxx
如果我不使用,调用一些将无法工作的代码-tt
。您可能会声称这样的代码有问题,我可能同意,但强制使用 tty 会让它开心。
一切运行正常,但是他们从 B 到 A 打开的手动连接却充满了消息(实际上无法使用):
process_mux_new_session: tcgetattr: Inappropriate ioctl for device
这似乎与https://stackoverflow.com/questions/1495776/和https://bugzilla.mindrot.org/show_bug.cgi?id=1686
有没有什么办法可以让这些消息静音,以使第一个连接有用,而不需要打开另一个连接?
答案1
将@MarkWagner 评论提升为答案状态。
根据错误中的补丁,您需要将其添加
-q
到 ssh 调用之一(我不确定是哪一个)。– 5 月 19 日 19:42
根据一些快速测试,似乎从 B 到 A 打开的手动连接是需要-q
答案2
我会寻找最大会话数在服务器-A上
grep MaxSessions /etc/ssh/sshd_config
并在客户端上 ~/.ssh/config控制持续超时
Host *
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 10m
您可能还更喜欢 ControlPath ~/tmp/ssh_mux_%h_%p_%r 来防止用户覆盖彼此的文件
此外,控制路径使用主机名“%h”,该主机名可能会因调用而变化。
另一个可能的解决方案是调整终端设置
ssh server_A TERM=tn3270 /opt/wierd/complex_command.cobol
或者甚至在屏幕下运行 https://www.youtube.com/watch?v=hB6Y72DK8mc https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/