在通过隧道 SSH 连接创建 VNC 连接时,出现错误:
channel 3: open failed: administratively prohibited: open failed
Run Code Online (Sandbox Code Playgroud)
我发现只有当我没有在本地登录主机时才会发生这种情况,因为username我正在尝试使用隧道 VNC 连接连接到主机。SSH隧道:
ssh -p 6000 -L 5901:127.0.0.1:5901 username@192.168.0.2
Run Code Online (Sandbox Code Playgroud)
VNC 连接:
vncviewer localhost:1
Run Code Online (Sandbox Code Playgroud)
我尝试在/etc/ssh/sshd_config使用AllowTunnel yes和不使用设置时调整设置。(我在每次更改后都重新启动了 ssh : service ssh restart) 但是,如果我在远程主机上运行本地会话,错误就会消失(即我以username本地身份登录。)还有其他人看到这种行为吗?似乎我应该能够远程启动 VNC 并访问它,而无需在本地登录。
如果我运行这样的东西:
ssh -4 -f -N -T -R "/home/dude/lol.socket:192.168.4.44:4444" dude@someserver -p 22 -i privatekey -o "ExitOnForwardFailure yes" -o ConnectTimeout=5 -o ConnectionAttempts=3 -o ServerAliveInterval=15 -o
Run Code Online (Sandbox Code Playgroud)
然后让我们说连接因任何原因关闭或死亡..说计算机由于维护或错误或互联网连接问题或其他原因重新启动 - >我们有一个大问题。sshd 不会删除/home/dude/lol.socket在 上创建的套接字文件someserver。因此,当反向隧道启动器正在恢复并尝试重新创建隧道时,它不能,因为:
Error: remote port forwarding failed for listen path /home/dude/lol.socket
Run Code Online (Sandbox Code Playgroud)
在服务器端,你会得到类似的东西:
error: bind: Address already in use
error: unix_listener: cannot bind to path: /home/dude/lol.socket
Run Code Online (Sandbox Code Playgroud)
断开连接后清理套接字的支持方式/最佳黑客是什么?这是 sshd 中的一个错误,如果/当注意到断开连接时,它不应该自动执行此操作吗?
使用套接字背后的想法很简单,服务器将处理 n 个“伙计”,在任何端口为 m 个“大声笑”服务创建反向隧道,并且使用套接字可以更轻松地确保“伙计”只能访问和绑定到他自己的插座,而不是其他人的插座。它还使我不必记录哪个家伙使用哪个端口来公开哪个服务。当老兄想连接到其他服务器上的服务时,他只需要知道服务的名称并将其绑定到某个随机的本地端口(如果他愿意,也可以使用套接字)即
ssh -v -i -4 -N -T -L "127.0.0.1:3334:/home/dude/lol.sock" -p 22 dude@someserver -o "ExitOnForwardFailure yes" -o ConnectTimeout=5 …
我对 sshd 中的“MaxSessions”参数有问题。
我想通过一个 ssh 连接限制会话数。例如用于 tcp 转发。
当我将 MaxSessions 设置为 0 时,登录不起作用(很好,这就是它应该如何工作)但是当我设置为 1 时,我可以通过一个 ssh 连接进行多个会话(甚至 1 禁用多路复用)并将其设置为 2 或更多也没有效果。
也许你可以指导我找到正确的解决方案。
我是这样测试的:打开从 putty (win) 到服务器 (BSD) 的 ssh 连接。正在使用端口转发(用于 http)。所以我在浏览器中使用 SOCKS。
我同时从两个不同的网站下载了两个文件,它通过这个隧道对这两个文件都有效,但不应该(MaxSessions 设置为 1)。
感谢您的任何帮助。
我的问题基本上是如何将我现有的两个步骤变成一个步骤。
我使用中间人服务器在两台计算机之间设置了一个有效的 SSH 隧道,如下所示:
Kubuntu_laptop--->nat_fw--->Debian_Server<--nat_fw<--Kubuntu_desktop
Run Code Online (Sandbox Code Playgroud)
我目前所做的是从 Kubuntu_laptop 到 Debian_Server 然后从 Debian_Server 到 Kubuntu_desktop 的 SSH。我想用 bash 在我的 Kubuntu_laptop 上发出一个 SSH 命令,这导致我连接到 Kubuntu_desktop(shell/bash)。
我现在使用的命令如下。第1步:
me@kubuntu_laptop:~$ ssh -i ~/.ssh/id_rsa admin@debian_server
Run Code Online (Sandbox Code Playgroud)
第2步:
admin@debian_server:$ ssh -p 1234 -i /home/admin/.ssh/id_rsa admin@localhost
Run Code Online (Sandbox Code Playgroud)
然后我通过 SSH(来自 kubuntu_laptop)连接到 kubuntu_desktop。
所有 SSH 连接都需要 RSA 密钥。密码登录一直被禁用。请注意,其中两台计算机的计算机用户帐户不同。
关于这条腿的连接:
Debian_Server<--nat_fw<--Kubuntu_desktop
Run Code Online (Sandbox Code Playgroud)
这是它的建立方式:
autossh -M 5234 -N -f -R 1234:localhost:22 user@mydebian.com -p 22
Run Code Online (Sandbox Code Playgroud)
注意 Kubuntu_desktop 以 user@mydebian.com(不是 admin@debian_server)的身份连接到中间人。但是当我连接到 Kubuntu_desktop 时,我以管理员用户身份连接。
我无法更改现有的监控端口 (5234) 或远程 (-R) 端口号(在此示例中为 1234)。我无法更改 SSH 安全性以允许密码登录。我无法打开任何新的防火墙端口。我无法更改用户帐户(笔记本电脑除外)。
我正在尝试设置 ssh 隧道布局,其中:
一种可能的解决方案是在客户端 A(绑定到 localhost:xxxx)上添加代理服务器,然后在客户端 A 上运行ssh -R yyyy:localhost:xxxx Server。这样就可以达到目的了。但这并不像只使用 ssh 那样干净。
是否可以仅使用 A 上的 ssh 客户端和 S 上的 ssh-server 来实现这一点?这就像 ssh 上的反向动态端口转发 -ssh -D从 A 到 S创建,然后以某种方式在此隧道上设置ssh -D从 S 到 A的第二条隧道。有点令人困惑,并且不确定是否可能。
有没有办法在单个 SSH 命令中通过 SSH 登录到通过中间服务器的远程服务器?本质上,我需要创建一个到我的“桥接服务器”的隧道,并通过该隧道登录到远程服务器。
例如,我试图将以下内容压缩到一个 ssh 命令中:
这目前有效,但我宁愿能够将所有内容压缩到一个命令中,这样如果我退出我的 ssh shell,我的隧道就会同时关闭。
我在我的配置中尝试了以下但无济于事:
Host axp
User remote_userid
HostName remoteserver.com
IdentityFile ~/.ssh/id_rsa.eric
ProxyCommand ssh -W %h:%p bridge_userid@bridgemachine.com
Run Code Online (Sandbox Code Playgroud)
根据@jasonwryan 的评论和透明多路链接,我可以使用以下命令:
ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com
Run Code Online (Sandbox Code Playgroud)
但现在我想把它整齐地打包到我的 .ssh/config 文件中,并且不太确定我需要使用什么作为我的 ProxyCommand。我在网上看到了几个链接以及@boomshadow 的回答nc,但不幸的是,我用作桥接机的 AIX 服务器上没有安装 netcat。
我知道我可以通过以下方式在 ssh 配置文件中转发多个端口:
Host name
HostName yam.myHost.edu
User myUserName
LocalForward 5901 127.0.0.1:5901
LocalForward 5902 127.0.0.1:5902
[...]
LocalForward 5910 127.0.0.1:5910
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来转发一系列端口而无需为端口添加额外的线路?像LocalForward 5901-5910 127.0.0.1:5901-5910什么?
基本上整个问题都在标题中:ssh 是否通过网络发送密码?当然假设使用通过用户名和密码登录。
我问是因为如果 ssh 不通过网络发送密码,即使用户将所谓的主机添加到其 known_hosts 文件中,中间人也无法获得用户的密码。
有人说必须,所以我在评论中写了一个反例。由于现在反复出现它可能如何工作的问题,我在此处复制该评论。
服务器可以告诉客户端使用哪个散列。[用于对服务器影子文件中的密码进行散列的同一个。] 然后客户端可以计算散列?哪个应该在服务器的影子文件中,但让我们调用服务器上的那个?”。所以服务器和客户端都知道?。然后客户端可以选择随机盐?向服务器发送 (hash(?.?), ?)(.连接运算符在哪里)。服务器然后散列 ?'.? 并检查它从客户端收到的元组的第一个元素是否与该哈希匹配。如果是,则客户端知道密码。
我需要在某个远程盒子上进行一些开发。幸运的是,我有 shell 访问权限,但我需要通过一个将 AllowTcpForwarding 设置为 false 的网关。
我在文档上达到了顶峰,它说:
AllowTcpForwarding 指定是否允许 TCP 转发。默认值为“是”。请注意,除非用户也被拒绝 shell 访问,否则禁用 TCP 转发不会提高安全性,因为他们始终可以安装自己的转发器。
我将如何安装(或构建)我自己的货运代理?我的目标是通过 SSH使用 Pycharm设置一个远程解释器,并将其绑定到某个本地端口,通过 ssh 提供数据,通过网关,然后到实际运行代码的开发箱。我想我可以以某种方式利用 nc 或其他一些 Unix 实用程序来帮助完成工作。
我知道我可以通过以下方式通过 ssh 连接到我的远程盒子:
ssh -t user1@gateway ssh user2@devbox
Run Code Online (Sandbox Code Playgroud)
但显然这个选项在 pycharm 中不可用。我必须能够打开一些本地端口,以便
ssh -p 12345 localhost
(or variant)
Run Code Online (Sandbox Code Playgroud)
将我连接到 user2@devbox。这将允许我配置远程解释器使用的端口12345上localhost连接到远程框。
如果我使用客户端使用 SSH 创建反向隧道,-R如果我运行 netstat,我将在服务器上获得此输出:
default@debian:~$ sudo netstat -pln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 801/sshd
tcp 0 0 127.0.0.1:39963 0.0.0.0:* LISTEN 1074/sshd: anonymou
tcp6 0 0 :::22 :::* LISTEN 801/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 451/dhclient
Run Code Online (Sandbox Code Playgroud)
我想知道在 port 上创建侦听套接字的客户端的 IP 是多少39963。
我可以运行什么命令,这样我不仅可以获得绑定的 IP:PORT,还可以获得创建隧道的客户端的 IP?