假设我已通过SSH连接到远程计算机。从此远程计算机上的程序中,我需要在本地计算机(连接启动器)上执行命令。
这就提出了一个问题:是否有可能在两台计算机之间建立现有连接以在本地计算机上运行命令?
我考虑过ssh user@host-of-connecting-party <command>
在远程计算机上运行命令以建立反向连接。但这很难实现自动化,并且需要用户干预。我希望我可以完全自动化它,或者至少检测连接用户的用户名/主机名。
假设我已通过SSH连接到远程计算机。从此远程计算机上的程序中,我需要在本地计算机(连接启动器)上执行命令。
这就提出了一个问题:是否有可能在两台计算机之间建立现有连接以在本地计算机上运行命令?
我考虑过ssh user@host-of-connecting-party <command>
在远程计算机上运行命令以建立反向连接。但这很难实现自动化,并且需要用户干预。我希望我可以完全自动化它,或者至少检测连接用户的用户名/主机名。
Answers:
有时候,我也有类似的需求,只要我通过Putty连接到我们的VPN服务器,然后再通过ssh从那里连接到其他主机,由于VPN设置,这对我来说是直接无法达到的。
有时,我只需要在VPN服务器计算机上快速检查某些内容,同时仍在运行“ ssh-session”。一种方法是在之下运行ssh会话screen
,正如我所注意到的,与“常规ssh”相比,这会增加一些延迟。我想在这里分享的另一种方法是:
在SSH会话下,按Enter,然后按,~(确保未显示,即您处于命令模式),然后按Ctrl- Z。这会将ssh客户端进程置于后台的“主机”上,您将遵循以下步骤:
[root@client170 ~]# ~^Z [suspend ssh]
[1]+ Stopped ssh root@10.0.0.167
[root@vps291736 ~]#
现在,您位于“主机”上,可以做任何您想做的事(尽管我不确定ssh会话将保持多长时间),然后通过运行返回到SSH会话fg
。
至少,当我从Win10工作站通过基于CentOS的VM上的Putty从Win10工作站连接,并从该VM通过SSH连接到其他主机时,这对我来说是有效的。
希望它能对某人有所帮助!
PermitLocalCommand yes
在你.ssh/config
的主机,你也可以做<Enter>~C
,然后!<command>
。
@ 62mkv的答案是一个更好的解决方案。用那个
但是出于完整性和好奇心,如果本地计算机上运行着ssh服务器,则可以创建ssh隧道,以允许从端口20202上的远程主机到端口22上的本地主机的ssh连接。
ssh -R20202:localhost:22 remoteuser@remotehost.com
这将启动ssh连接,但还会建立一条返回到计算机上运行的ssh服务器的隧道。然后,当您将其放入远程主机时,您可以执行以下操作:
ssh -p 20202 localuser@localhost
当然,这会很快变得令人困惑-特别是如果该技术嵌套了不止一次。它还增加了一点延迟-因为您在本地计算机上执行的所有操作都会通过远程主机退回。
对于这个尚未满足好奇心的人们,有关ssh隧道的其他信息可以在此unix stackexchange问题的答案中找到。
如果可以通过Internet访问本地计算机和远程计算机,则只需从远程计算机上的本地计算机打开SSH会话,然后在该会话中从本地计算机上的远程计算机打开另一个ssh会话:
localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>
对于自动化的东西,请看一下Fabric(需要Python知识)
from fabric.api import *
@hosts('host1')
def clean_and_upload():
local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
local('tar czf /tmp/assets.tgz assets/')
put('/tmp/assets.tgz', '/tmp/assets.tgz')
with cd('/var/www/myapp/'):
run('tar xzf /tmp/assets.tgz')
不,您不能进入现有会话。
您的应用程序将需要一种连接回客户端的方法。如果客户端运行的是SSH服务器,并且服务器可以访问客户端上的端口22,则SSH可以工作。如果您使用基于密钥的身份验证而不是密码身份验证,将不难实现自动化-这样就无需用户干预。
有关设置基于密钥的身份验证的信息,可以在以下位置找到:http : //tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/