Answers:
如果您提前计划,那么使用足够新版本的OpenSSH非常简单。
第一次打开主连接。对于后续连接,请通过现有的主连接路由从属连接。在您的中~/.ssh/config
,将连接共享设置为自动进行:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
如果启动与现有连接相同的ssh会话(用户,端口,计算机),则第二个会话将在第一个会话上建立隧道。建立第二个连接不需要新的身份验证,并且速度非常快。
/var/log/secure
并/var/log/auth.log
记录SSH连接;从属连接不会出现在那里,因为它背负在现有连接上。如果您的ssh会话分配了一个终端(即ssh somehost
,没有提供任何命令,或ssh -t
),则wtmp
该终端(通常)已登录,而不管该终端的显示方式如何(sshd使用哪种方法建立连接,终端仿真器应用程序……)。
ControlPersist 600
它,这是套接字空闲之前经过几秒钟的延迟,然后套接字才会被自动删除。否则,当主连接结束时,它将自动关闭。这对于远程执行一系列命令(例如,将一系列rsync命令发送到不同的文件夹)没有
-S
(指定套接字)和-M
(创建主连接)。
使用nc工具和ssh隧道很容易实现。
在ssh会话中,输入~C新行。您将看到ssh“服务控制台”提示,如下所示:
ssh>
键入本地转发命令以打开ssh隧道:
ssh> -L22000:targethost:22001
Forwarding port.
targethost
您连接到的计算机的主机名或IP地址在哪里。
现在,假设未将目标计算机上的ssh服务器配置为禁止隧道,则您具有所需的连接转发:ssh
计算机上的客户端侦听端口22000,它将发送给它的所有流量转发到上的22001端口targethost
。
这就像输入以下命令进入已经打开的ssh会话一样简单:
remote$ nc -l localhost 22001 | sh
这将启动侦听端口22001(这是ssh隧道的目标端口)的TCP服务器,并将接收到的数据(大概是shell命令)路由到targethost
shell实例。
local$ cat yourscript.sh | nc localhost 22000
这会将脚本的主体发送到您的ssh隧道,并最终在的shell中执行targethost
。您将在带有ssh会话的终端中看到脚本的输出。
我还将注意到,在这种情况下ssh隧道(第1步)并非严格要求;您也可以打开服务器并直接通过Internet连接到它。但是,如果无法直接访问目标主机(例如,在NAT之后),或者需要ssh加密,则需要使用隧道。
~
字符必须在换行符之后,因此LF ~ C
可能是更好的顺序。
less
常见的默认寻呼机支持搜索,如果您知道关键字,可以节省一些滚动:只需键入man ssh
/ESCAPE
就可以了。