ssh:需要时自动建立隧道

ssh:需要时自动建立隧道

我需要从办公室和家里 ssh 到各种机器。在办公室时,我可以~/.ssh/config轻松使用主机定义,只需执行以下操作:

ssh servername_shortcut

当我在家时,我需要通过网关服务器建立隧道,这是一个多步骤且繁琐的过程

ssh -N -f -C -L 2024:servername:22 [email protected]
ssh -p 2024 username@localhost

(这特别烦人,因为断开连接时我必须手动终止隧道)

同样,我经常需要 rsync 东西,这需要:

rsync -e 'ssh -p 2024' username@localhost:... 

代替

rsync username@servername_shortcut

由于我经常在这些情况之间切换,我真的很想能够一直使用简短版本。有什么机制可以实现这一点吗?

编辑:具体来说,使用~/.ssh/config,是否有办法指定host.domain.org在允许时以及localhost:$portnumber隧道打开时使用的主机名?在伪代码中,我要求这样做:

host myhost
user aginsbur
if tunnel:
    HostName localhost
    port 2022
else:
    HostName myhost.domain.org

答案1

我知道 @Jonno 已经把这个放在评论中了,但这是一个很好的建议,这正是我要做的,所以我想把它放在这里:只需将命令放在 bash 脚本中。例如:

echo 'ssh -N -f -C -L 2024:servername:22 [email protected]' > ssh_gateway_hostname.sh

这会将命令放入.sh文件中,然后您可以通过几种不同的方式运行它:

bash ssh_gateway_hostname.sh

或者

source ssh_gateway_hostname.sh

虽然两者之间存在细微的差异,但除非您对环境进行一些奇特的操作,否则它不太可能对您产生影响。

有趣的是rsync,在首次rsync使用文件或目录后,后续使用只会更新更改。这意味着您只需指定要同步的目录并将其放入脚本中即可.sh

echo 'rsync -e 'ssh -p 2024' username@localhost:...' > rsync_username_at_localhost.sh

然后当您运行它时,它只会移动新的东西!

相关内容