![伪终端不会被分配,因为 stdin 不是终端](https://linux22.com/image/33746/%E4%BC%AA%E7%BB%88%E7%AB%AF%E4%B8%8D%E4%BC%9A%E8%A2%AB%E5%88%86%E9%85%8D%EF%BC%8C%E5%9B%A0%E4%B8%BA%20stdin%20%E4%B8%8D%E6%98%AF%E7%BB%88%E7%AB%AF.png)
我正在尝试通过没有 nc 的服务器设置自动 SSH 跳跃。
这可以从命令行运行:
ssh -A gateway ssh steve@target
(我已将我的公钥添加到 SSH 代理中)。
但是,将其添加到 ~/.ssh/config 不会:
Host target
User steveb
ProxyCommand ssh -A gateway ssh steve@targetip
$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
^CKilled by signal 2.
试图强行解决这个问题-t
很有趣,但没有帮助。
ProxyCommand ssh -A -t gateway ssh steve@targetip
$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
^CKilled by signal 2.
更多-t
的?不好。
ProxyCommand ssh -A -t -t gateway ssh steve@targetip
$ ssh target
tcgetattr: Inappropriate ioctl for device
^CKilled by signal 2.
这可能吗?大多数教程(例如http://www.arrfab.net/blog/?p=246)建议使用nc
.
答案1
不带 netcat 的 SSH 代理命令
当主机只能间接访问时,ProxyCommand 非常有用。对于 netcat 来说,它是相对前进的:
ProxyCommand ssh {gw} netcat -w 1 {host} 22
这里的 {gw } 和 {host} 是网关和主机的占位符。
但网关上未安装netcat时也有可能:
ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'
/dev/tcp 是标准 bash 的内置功能。这些文件不存在。要检查 bash 是否内置此功能,请运行:
cat < /dev/tcp/google.com/80
...在网关上。
要确保使用 bash,请使用:
ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"
它甚至可以与 ControlMaster 配合使用。
(于 10 月 22 日更新,包括 Kill 以清理后台猫)(于 2011 年 3 月 3 日更新,使占位符更加清晰并解释 /dev/tcp)
100% 归功于罗兰·舒尔茨。这是来源:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
在评论中查看更多有用的信息。
这里还有更多:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack-4r1ubuntu/
更新: 这是新的东西马可
参考 ~/.ssh/config 中的 ProxyCommand,其中有这样一行:
ProxyCommand ssh gateway nc localhost %p
马可 说:
如果您使用最新版本的 OpenSSH,则不需要 netcat。您可以将 nc localhost %p 替换为 -W localhost:%p。
结果如下:
ProxyCommand ssh gateway -W localhost:%p
答案2
大T,不是小T。
-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation.
我的脚本曾经返回该消息,现在不再返回。
/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system
我authorized_key
在 other_system 上使用 来使其运行命令:
from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ...
答案3
尝试一下:
ProxyCommand ssh -A -t gateway ssh -t steve@targetip
答案4
您可以尝试以下技术:先通过 ssh 连接到 server1,然后再通过 ssh 连接到 server2。
$ ssh -t user1@server1 ssh -t user2@server2
像这样做对我有用。