Dan*_*iel 15 ssh remote-access
假设我已通过 SSH 连接到远程计算机。从这台远程计算机上的程序中,我需要在本地计算机(连接发起方)上执行命令。
这就提出了一个问题:是否可以利用两台计算机之间的现有连接在本地计算机上运行命令?
我已经考虑ssh user@host-of-connecting-party <command>
在远程计算机上运行命令来建立反向连接。但这更难自动化,并且需要用户干预。我希望我可以完全自动化它,或者至少检测连接用户的用户/主机名。
小智 9
有时我也有类似的需求,只要我通过 Putty 连接到我们的 VPN 服务器,然后通过 ssh 连接到其他主机,由于 VPN 设置,我无法直接访问它。
有时我只需要在 VPN 服务器机器上快速检查一些东西,同时我的“ssh 会话”仍在运行。一种方法是在 下运行 ssh 会话screen
,正如我所注意到的,与“常规 ssh”相比,这会增加一些延迟。我想在这里分享的另一种方法如下:
在 SSH 会话下,按Enter,然后~,(确保它没有显示,即您处于命令模式),然后Ctrl- Z。这会将 ssh 客户端进程放在“主机”上的后台,您将获得以下内容:
[root@client170 ~]# ~^Z [suspend ssh]
[1]+ Stopped ssh root@10.0.0.167
[root@vps291736 ~]#
Run Code Online (Sandbox Code Playgroud)
现在您在“主机”上,可以做任何您想做的事情(尽管我不确定 ssh 会话将保持多长时间),然后通过运行 .ssh 返回到 SSH 会话fg
。
至少,当我通过基于 CentOS 的 VM 上的 Putty 从 Win10 工作站连接,并从该 VM 通过 SSH 连接到其他主机时,这对我有用。
希望它可以帮助某人!
@62mkv 的答案是一个更好的解决方案。用那个。
但是,为了完整性和好奇心,如果您在本地计算机上运行了 ssh 服务器,则可以创建一个 ssh 隧道,以允许从远程主机在端口 20202 上的 ssh 连接返回到端口 22 上的本地主机。示例命令:
ssh -R20202:localhost:22 remoteuser@remotehost.com
Run Code Online (Sandbox Code Playgroud)
这将启动一个 ssh 连接,但也会建立一个返回到您机器上运行的 ssh 服务器的隧道。然后您可以在通过 ssh 连接到远程主机时执行此操作:
ssh -p 20202 localuser@localhost
Run Code Online (Sandbox Code Playgroud)
当然,这很快就会令人困惑——尤其是如果该技术嵌套多次。它也增加了一些延迟 - 因为您在本地机器上执行的所有内容都通过远程主机反弹。
对于那些好奇心尚未得到满足的人来说,有关 ssh 隧道的其他信息可以在这个 unix stackexchange question 的回答中找到。
如果您的本地和远程计算机都可以通过 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>
Run Code Online (Sandbox Code Playgroud)
对于自动化的东西,可以看看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')
Run Code Online (Sandbox Code Playgroud)
您可以使用sshpass连接到远程计算机并运行命令。
./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'
Run Code Online (Sandbox Code Playgroud)
在本地计算机上使用简单的 shell 脚本,并在想要在远程计算机上运行命令时使用上面的代码。这是我在自动化中通常使用的方式之一。