![主机到主机 SSH 隧道](https://linux22.com/image/855120/%E4%B8%BB%E6%9C%BA%E5%88%B0%E4%B8%BB%E6%9C%BA%20SSH%20%E9%9A%A7%E9%81%93.png)
我想在两个 Ubuntu 12.04 服务器之间创建一个完整的 SSH 隧道(我发现了 SSHuttle,但是由于处理文件描述符时存在错误,它会在高负载下崩溃),非常类似于 IPSEC,但因为我只需要在两个主机上使用它,所以创建一个成熟的 IPSEC 配置的复杂性似乎有点大材小用。
我想要实现的是,server1 和 server2 之间传输的所有数据都将被加密,而无需创建数千个 SSH 动态端口。
答案1
此答案属于布兰登切克茨。
假设您有两台主机,分别名为 Host-A 和 Host-B。现在我们将在这两者之间创建一个 SSH 隧道,并确保该隧道始终处于启动和活动状态。
需要为主机 A 完成以下配置:
打开终端,转换为 root 并逐一粘贴代码
useradd -d /home/tunnel tunnel
passwd tunnel
su - tunnel
下一步是创建 SSH 密钥
在终端中粘贴为
ssh-keygen
然后选择所有提示的默认选项并复制密钥
cat /.ssh/id_rsa.pub
现在我们必须对 Host-B 进行配置
打开终端并执行这些命令
useradd -d /home/tunnel tunnel
passwd tunnel
su - tunnel
并在终端类型中输入
mkdir .ssh
vi .ssh/authorized_keys
它将在终端中打开一个文件并粘贴从主机 A 复制的密钥。
现在在终端中输入
vi /home/tunnel/check_ssh_tunnel.sh
并粘贴为
createTunnel() {
/usr/bin/ssh -f -N -L13306:hostb:3306 -L19922:hostb:22 tunnel@hostb
if [[ $? -eq 0 ]]; then
echo Tunnel to hostb created successfully
else
echo An error occurred creating a tunnel to hostb RC was $?
fi
}
## Run the 'ls' command remotely. If it returns non-zero, then create a new connection
/usr/bin/ssh -p 19922 tunnel@localhost ls
if [[ $? -ne 0 ]]; then
echo Creating new tunnel connection
createTunnel
fi
保存并关闭并使其可执行
chmod 700 /home/tunnel/check_ssh_tunnel.sh
然后运行脚本,它将启动与远程 PC 的隧道。
阅读上面的链接,这是必须的。