我需要从办公室和家里 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
然后当您运行它时,它只会移动新的东西!